Ticket #152: patch

File patch, 2.6 KB (added by spitzak@…, 5 years ago)

Patch to handle anchor/alias according to yaml1.2 spec

  • src/scanner.c

     
    23352335 
    23362336    if (!CACHE(parser, 1)) goto error; 
    23372337 
    2338     while (IS_ALPHA(parser->buffer)) { 
     2338    while (!IS_BLANKZ(parser->buffer) && !CHECK(parser->buffer, ',') 
     2339           && !CHECK(parser->buffer, '[') && !CHECK(parser->buffer, ']') 
     2340           && !CHECK(parser->buffer, '{') && !CHECK(parser->buffer, '}')) { 
    23392341        if (!READ(parser, string)) goto error; 
    23402342        if (!CACHE(parser, 1)) goto error; 
    23412343        length ++; 
     
    23432345 
    23442346    end_mark = parser->mark; 
    23452347 
    2346     /* 
    2347      * Check if length of the anchor is greater than 0 and it is followed by 
    2348      * a whitespace character or one of the indicators: 
    2349      * 
    2350      *      '?', ':', ',', ']', '}', '%', '@', '`'. 
    2351      */ 
    2352  
    2353     if (!length || !(IS_BLANKZ(parser->buffer) || CHECK(parser->buffer, '?') 
    2354                 || CHECK(parser->buffer, ':') || CHECK(parser->buffer, ',') 
    2355                 || CHECK(parser->buffer, ']') || CHECK(parser->buffer, '}') 
    2356                 || CHECK(parser->buffer, '%') || CHECK(parser->buffer, '@') 
    2357                 || CHECK(parser->buffer, '`'))) { 
     2348    if (!length) { 
    23582349        yaml_parser_set_scanner_error(parser, type == YAML_ANCHOR_TOKEN ? 
    23592350                "while scanning an anchor" : "while scanning an alias", start_mark, 
    23602351                "did not find expected alphabetic or numeric character"); 
  • src/emitter.c

     
    11541154            break; 
    11551155 
    11561156        case YAML_MAPPING_START_EVENT: 
    1157             if (!yaml_emitter_check_empty_sequence(emitter)) 
     1157            if (!yaml_emitter_check_empty_mapping(emitter)) 
    11581158                return 0; 
    11591159            length += emitter->anchor_data.anchor_length 
    11601160                + emitter->tag_data.handle_length 
     
    14131413    } 
    14141414 
    14151415    while (string.pointer != string.end) { 
    1416         if (!IS_ALPHA(string)) { 
     1416        if (IS_BLANKZ(string) || CHECK(string, ',') 
     1417            || CHECK(string, '[') || CHECK(string, ']') 
     1418            || CHECK(string, '{') || CHECK(string, '}')) { 
    14171419            return yaml_emitter_set_emitter_error(emitter, alias ? 
    1418                     "alias value must contain alphanumerical characters only" : 
    1419                     "anchor value must contain alphanumerical characters only"); 
     1420                    "character not allowed in alias value" : 
     1421                    "character not allowed in anchor value"); 
    14201422        } 
    14211423        MOVE(string); 
    14221424    }