IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Aug 9, 2017, 12:47:22 PM (9 years ago)
Author:
eugene
Message:

mostly harmless changes to track down dvopsps segfaults: watch out for Bzero,Bscale in F_set_column.c

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ohana.20170809/src/libfits/header/F_modify.c

    r38441 r40113  
    7272    char *ptr = va_arg (argp, char *);
    7373    if (!ptr) goto invalid;
    74     strncpy (data, ptr, 68);
     74    strncpy (data, ptr, 68); data[68] = 0;
    7575    snprintf (string, 81, "%-8s= '%-8s' / %-s ", field, data, comment);
    7676    goto found_it;
     
    119119      header[0].datasize += FT_RECORD_SIZE;
    120120      REALLOCATE (header[0].buffer, char, header[0].datasize);
     121      /* re-find the "END" marker, in case new memory block is used */
    121122      p = gfits_header_field (header, "END", 1);
    122123      if (p == NULL) return (FALSE);
     
    138139  /* write the boolean mode */
    139140  if (!strcmp (mode, "%t")) {
    140     if (va_arg (argp, int))
    141       snprintf (string, 81, "%-8s= %18s T / %-s ", field, " ", comment);
    142     else
    143       snprintf (string, 81, "%-8s= %18s F / %-s ", field, " ", comment);
     141    // fill data will spaces, null terminated, so snprintf can generate a space-filled block
     142    memset (data, ' ', FT_LINE_LENGTH); data[FT_LINE_LENGTH] = 0;
     143    if (va_arg (argp, int))  {
     144      snprintf (string, 81, "%-8s= %18s T / %-s ", field, data, comment);
     145    } else {
     146      snprintf (string, 81, "%-8s= %18s F / %-s ", field, data, comment);
     147    }
    144148  }
    145149
     
    148152    char *ptr = va_arg (argp, char *);
    149153    if (!ptr) goto invalid;
    150     strncpy (data, ptr, 71);
     154    strncpy (data, ptr, 71); data[71] = 0;
    151155    snprintf (string, 81, "%-8s %-71s", field, data);
    152156  } 
     
    159163    /* keep ' on ends, if there */
    160164    if (qe[0]  == 0x27) qe ++;
    161     if (qs[-1] == 0x27) qs --;
     165    if (qs >= p + 1) {
     166      if (qs[-1] == 0x27) qs --;
     167    }
    162168
    163169    strncpy (data, qs, MAX (MIN (qe - qs, 71), 0));
Note: See TracChangeset for help on using the changeset viewer.