2 Stimmen

Potenzielle Null-Dereferenzierung

Ich bin mit einem Open-Source-Json-Parser, aber während der Kompilierung seine geben mir dereferencing Warnungen.

MyProject/Classes/SBJSON.m:403:13 Potenzielle Null-Dereferenz. Gemäß den Kodierungsstandards in 'Creating and Returning NSError Objects' kann der Parameter 'error' null sein

- (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;
}

hier zeigt es Dereferenzierung bei Fehler.

5voto

Martin v. Löwis Punkte 120025

Es wird bemängelt, dass der Fehlerparameter NULL sein könnte (falls der Aufrufer NULL übergeben möchte). Dann wird die Anweisung

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

wird abstürzen. A r gemeldete Umgehung ist es, eine if-Anweisung um die Zuweisung herum zu setzen:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X