2010-12-14 66 views
2

J'utilise un analyseur json open-source, mais en compilant ses avertissements de déréférencement.Déréférencement potentiel nul

MyProject/Classes/SBJSON.m: 403: 13 Dérérence nulle potentielle. Selon les normes de codage dans « Création et retour objets NSError » le paramètre « erreur » peut être nul

- (BOOL)scanValue:(NSObject **)o error:(NSError **)error 
{ 
skipWhitespace(c); 

switch (*c++) { 
    case '{': 
     return [self scanRestOfDictionary:(NSMutableDictionary **)o error:error]; 
     break; 
    case '[': 
     return [self scanRestOfArray:(NSMutableArray **)o error:error]; 
     break; 
    case '"': 
     return [self scanRestOfString:(NSMutableString **)o error:error]; 
     break; 
    case 'f': 
     return [self scanRestOfFalse:(NSNumber **)o error:error]; 
     break; 
    case 't': 
     return [self scanRestOfTrue:(NSNumber **)o error:error]; 
     break; 
    case 'n': 
     return [self scanRestOfNull:(NSNull **)o error:error]; 
     break; 
    case '-': 
    case '0'...'9': 
     c--; // cannot verify number correctly without the first character 
     return [self scanNumber:(NSNumber **)o error:error]; 
     break; 
    case '+': 
     *error = err(EPARSENUM, @"Leading + disallowed in number"); 
     return NO; 
     break; 
    case 0x0: 
     *error = err(EEOF, @"Unexpected end of string"); 
     return NO; 
     break; 
    default: 
     *error = err(EPARSE, @"Unrecognised leading character"); 
     return NO; 
     break; 
} 

NSAssert(0, @"Should never get here"); 
return NO; 
} 

ici il montre déréférencement en cas d'erreur.

+1

Avec code, il serait plus facile ... – Eiko

+0

je vient de modifier ma question. – Ksinak

Répondre

5

Il se plaint que le paramètre d'erreur peut être NULL (dans le cas où l'appelant choisit de passer NULL). Ensuite, l'instruction

*error = err(EPARSENUM, @"Leading + disallowed in number"); 

va se bloquer. Un r eported work-around est de mettre une instruction if autour de la mission:

if(error){ 
    *error = err(EPARSENUM, @"Leading + disallowed in number"); 
} 
+0

Merci Martin, cela résout beaucoup de problèmes potentiels de déréférencement nul dans mon application. – Ksinak