IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 16216


Ignore:
Timestamp:
Jan 23, 2008, 3:00:09 PM (18 years ago)
Author:
Paul Price
Message:

Protecting against SEGV when item->data.V is NULL.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/types/psMetadata.c

    r15524 r16216  
    1212 *  @author Ross Harman, MHPCC
    1313 *
    14  *  @version $Revision: 1.165 $ $Name: not supported by cvs2svn $
    15  *  @date $Date: 2007-11-09 00:48:09 $
     14 *  @version $Revision: 1.166 $ $Name: not supported by cvs2svn $
     15 *  @date $Date: 2008-01-24 01:00:09 $
    1616 *
    1717 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    13571357            break;
    13581358        case PS_DATA_METADATA:
    1359             //            fprintf(fd, "\n");
     1359            if (!item->data.V) {
     1360                fprintf(fd, "(null)\n");
     1361                break;
     1362            }
    13601363            psMetadataPrint(fd, item->data.V, level + 1);
    13611364            for (int i = 0; i < level; i++) {
     
    13641367            fprintf(fd, "%s  -- END\n", item->name);
    13651368            break;
    1366         case PS_DATA_REGION: {
    1367                 psString region = psRegionToString(*(psRegion*)item->data.V);
    1368                 fprintf(fd, "%s\n", region);
    1369                 psFree(region);
     1369        case PS_DATA_REGION:
     1370            if (!item->data.V) {
     1371                fprintf(fd, "(null)\n");
    13701372                break;
    13711373            }
     1374            psString region = psRegionToString(*(psRegion*)item->data.V);
     1375            fprintf(fd, "%s\n", region);
     1376            psFree(region);
     1377            break;
    13721378        case PS_DATA_LIST:
     1379            if (!item->data.V) {
     1380                fprintf(fd, "(null)\n");
     1381                break;
     1382            }
    13731383            fprintf(fd, "<a list of size %ld>\n", ((psList*)item->data.V)->n);
    13741384            break;
    1375         case PS_DATA_TIME: {
    1376                 psString time = psTimeToISO(item->data.V);
    1377                 fprintf(fd, "%s\n", time);
    1378                 psFree(time);
     1385        case PS_DATA_TIME:
     1386            if (!item->data.V) {
     1387                fprintf(fd, "(null)\n");
    13791388                break;
    13801389            }
    1381         case PS_DATA_VECTOR: {
    1382                 psVector *vector = item->data.V;
    1383                 switch (vector->type.type) {
    1384                 case PS_DATA_U8:
    1385                     fprintf(fd, "U8  ");
    1386                     for (int i = 0; i < vector->n; i++) {
    1387                         fprintf(fd, "%u ", vector->data.U8[i]);
    1388                     }
    1389                     fprintf(fd, "\n");
    1390                     break;
    1391                 case PS_DATA_U16:
    1392                     fprintf(fd, "U16  ");
    1393                     for (int i = 0; i < vector->n; i++) {
    1394                         fprintf(fd, "%u ", vector->data.U16[i]);
    1395                     }
    1396                     fprintf(fd, "\n");
    1397                     break;
    1398                 case PS_DATA_U32:
    1399                     fprintf(fd, "U32  ");
    1400                     for (int i = 0; i < vector->n; i++) {
    1401                         fprintf(fd, "%u ", vector->data.U32[i]);
    1402                     }
    1403                     fprintf(fd, "\n");
    1404                     break;
    1405                 case PS_DATA_U64:
    1406                     fprintf(fd, "U64  ");
    1407                     for (int i = 0; i < vector->n; i++) {
    1408                         fprintf(fd, "%ju ", vector->data.U64[i]);
    1409                     }
    1410                     fprintf(fd, "\n");
    1411                     break;
    1412                 case PS_DATA_S8:
    1413                     fprintf(fd, "S8  ");
    1414                     for (int i = 0; i < vector->n; i++) {
    1415                         fprintf(fd, "%d ", vector->data.S8[i]);
    1416                     }
    1417                     fprintf(fd, "\n");
    1418                     break;
    1419                 case PS_DATA_S16:
    1420                     fprintf(fd, "S16  ");
    1421                     for (int i = 0; i < vector->n; i++) {
    1422                         fprintf(fd, "%d ", vector->data.S16[i]);
    1423                     }
    1424                     fprintf(fd, "\n");
    1425                     break;
    1426                 case PS_DATA_S32:
    1427                     fprintf(fd, "S32  ");
    1428                     for (int i = 0; i < vector->n; i++) {
    1429                         fprintf(fd, "%d ", vector->data.S32[i]);
    1430                     }
    1431                     fprintf(fd, "\n");
    1432                     break;
    1433                 case PS_DATA_S64:
    1434                     fprintf(fd, "S64  ");
    1435                     for (int i = 0; i < vector->n; i++) {
    1436                         fprintf(fd, "%jd ", vector->data.S64[i]);
    1437                     }
    1438                     fprintf(fd, "\n");
    1439                     break;
    1440                 case PS_DATA_F32:
    1441                     fprintf(fd, "F32 ");
    1442                     for (int i = 0; i < vector->n; i++) {
    1443                         fprintf(fd, "%f ", vector->data.F32[i]);
    1444                     }
    1445                     fprintf(fd, "\n");
    1446                     break;
    1447                 case PS_DATA_F64:
    1448                     fprintf(fd, "F64 ");
    1449                     for (int i = 0; i < vector->n; i++) {
    1450                         fprintf(fd, "%f ", vector->data.F64[i]);
    1451                     }
    1452                     fprintf(fd, "\n");
    1453                     break;
    1454                 case PS_DATA_UNKNOWN:
    1455                 default:
    1456                     psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    1457                             _("Specified psDataType, %d, is not supported."), vector->type.type);
    1458                     psFree(iter);
    1459                     fprintf(fd, "<Unsupported type>\n");
    1460                     return false;
    1461                 }
    1462                 //                fprintf(fd, "\n");
    1463                 break;
    1464             }
     1390            psString time = psTimeToISO(item->data.V);
     1391            fprintf(fd, "%s\n", time);
     1392            psFree(time);
     1393            break;
     1394        case PS_DATA_VECTOR:
     1395          if (!item->data.V) {
     1396              fprintf(fd, "(null)\n");
     1397              break;
     1398          }
     1399          psVector *vector = item->data.V;
     1400          switch (vector->type.type) {
     1401            case PS_DATA_U8:
     1402              fprintf(fd, "U8  ");
     1403              for (int i = 0; i < vector->n; i++) {
     1404                  fprintf(fd, "%u ", vector->data.U8[i]);
     1405              }
     1406              fprintf(fd, "\n");
     1407              break;
     1408            case PS_DATA_U16:
     1409              fprintf(fd, "U16  ");
     1410              for (int i = 0; i < vector->n; i++) {
     1411                  fprintf(fd, "%u ", vector->data.U16[i]);
     1412              }
     1413              fprintf(fd, "\n");
     1414              break;
     1415            case PS_DATA_U32:
     1416              fprintf(fd, "U32  ");
     1417              for (int i = 0; i < vector->n; i++) {
     1418                  fprintf(fd, "%u ", vector->data.U32[i]);
     1419              }
     1420              fprintf(fd, "\n");
     1421              break;
     1422            case PS_DATA_U64:
     1423              fprintf(fd, "U64  ");
     1424              for (int i = 0; i < vector->n; i++) {
     1425                  fprintf(fd, "%ju ", vector->data.U64[i]);
     1426              }
     1427              fprintf(fd, "\n");
     1428              break;
     1429            case PS_DATA_S8:
     1430              fprintf(fd, "S8  ");
     1431              for (int i = 0; i < vector->n; i++) {
     1432                  fprintf(fd, "%d ", vector->data.S8[i]);
     1433              }
     1434              fprintf(fd, "\n");
     1435              break;
     1436            case PS_DATA_S16:
     1437              fprintf(fd, "S16  ");
     1438              for (int i = 0; i < vector->n; i++) {
     1439                  fprintf(fd, "%d ", vector->data.S16[i]);
     1440              }
     1441              fprintf(fd, "\n");
     1442              break;
     1443            case PS_DATA_S32:
     1444              fprintf(fd, "S32  ");
     1445              for (int i = 0; i < vector->n; i++) {
     1446                  fprintf(fd, "%d ", vector->data.S32[i]);
     1447              }
     1448              fprintf(fd, "\n");
     1449              break;
     1450            case PS_DATA_S64:
     1451              fprintf(fd, "S64  ");
     1452              for (int i = 0; i < vector->n; i++) {
     1453                  fprintf(fd, "%jd ", vector->data.S64[i]);
     1454              }
     1455              fprintf(fd, "\n");
     1456              break;
     1457            case PS_DATA_F32:
     1458              fprintf(fd, "F32 ");
     1459              for (int i = 0; i < vector->n; i++) {
     1460                  fprintf(fd, "%f ", vector->data.F32[i]);
     1461              }
     1462              fprintf(fd, "\n");
     1463              break;
     1464            case PS_DATA_F64:
     1465              fprintf(fd, "F64 ");
     1466              for (int i = 0; i < vector->n; i++) {
     1467                  fprintf(fd, "%f ", vector->data.F64[i]);
     1468              }
     1469              fprintf(fd, "\n");
     1470              break;
     1471            case PS_DATA_UNKNOWN:
     1472            default:
     1473              psError(PS_ERR_BAD_PARAMETER_VALUE, true,
     1474                      _("Specified psDataType, %d, is not supported."), vector->type.type);
     1475              psFree(iter);
     1476              fprintf(fd, "<Unsupported type>\n");
     1477              return false;
     1478          }
     1479          break;
    14651480        default:
    1466             //            fprintf(fd, "\n");
    1467             psError(PS_ERR_IO, false, "Non-printable metadata type for \"%s\": %x\n",
    1468                     item->name, item->type);
    1469             noErrors = false;
    1470             break;
    1471         }
    1472         //        fprintf(fd, "\n");
    1473     }
    1474     //    fprintf(fd, "\n");
     1481          psError(PS_ERR_IO, false, "Non-printable metadata type for \"%s\": %x\n",
     1482                  item->name, item->type);
     1483          noErrors = false;
     1484          break;
     1485        }
     1486    }
    14751487    psFree(iter);
    14761488
Note: See TracChangeset for help on using the changeset viewer.