psych 2.0.2 → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fe34c7fff6c7f07684a5412a451321413187345f
4
- data.tar.gz: 5945ad3ed259b7e40a6a29768582499ba7b28f70
3
+ metadata.gz: a1a904cdbd6c9e16a3b3857c895342397510bc5a
4
+ data.tar.gz: b4c98d184e105fce013d938635273f8e96ec7ce1
5
5
  SHA512:
6
- metadata.gz: 0630bc4eec665fed10bae438834a519ccb23d0a2ea0a85fb889f3115859b3805f6480829c184d0a3cdd813db6b94bbbff7083772dca74b5243693912181bbd8e
7
- data.tar.gz: c16d08618c06280e848a535f669f182a145ede5c6f1e1377f13159d33cf352ff49825667b292cbf21fbbef92bd15374f370afddff41bd0f2c144d14ce59bb76e
6
+ metadata.gz: 1a1e6b690f408452c7b0f997ec8dc2c0b904ce3741bed5c9c571c0991b656296a7033e291fe37024f4f068807cf2828fe464a9369955666a4bf73f2efe31c67d
7
+ data.tar.gz: de45125a31f1e676f80c25cf34be04bb27c0da721baa92a548fbda4154a52d8169722b832f3a656eee8b2fd66435bd2f24634e2542552ce99113658fe4251764
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,22 @@
1
+ Wed Feb 5 04:16:41 2014 Aaron Patterson <aaron@tenderlovemaking.com>
2
+
3
+ * ext/psych/yaml/emitter.c: merge libyaml 0.1.5
4
+ * ext/psych/yaml/loader.c: ditto
5
+ * ext/psych/yaml/parser.c: ditto
6
+ * ext/psych/yaml/reader.c: ditto
7
+ * ext/psych/yaml/scanner.c: ditto
8
+ * ext/psych/yaml/writer.c: ditto
9
+ * ext/psych/yaml/yaml_private.h: ditto
10
+
11
+ Thu Jan 9 09:55:20 2014 Aaron Patterson <aaron@tenderlovemaking.com>
12
+
13
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: dumping strings with
14
+ quotes should not have changed. [ruby-core:59316] [Bug #9300]
15
+
16
+ * ext/psych/lib/psych.rb: fixed missing require.
17
+
18
+ * test/psych/test_string.rb: test
19
+
1
20
  Wed Nov 27 06:40:18 2013 Aaron Patterson <aaron@tenderlovemaking.com>
2
21
 
3
22
  * ext/psych/lib/psych/scalar_scanner.rb: fix support for negative
@@ -221,7 +221,7 @@ yaml_emitter_write_indent(yaml_emitter_t *emitter);
221
221
 
222
222
  static int
223
223
  yaml_emitter_write_indicator(yaml_emitter_t *emitter,
224
- const char *indicator, int need_whitespace,
224
+ char *indicator, int need_whitespace,
225
225
  int is_whitespace, int is_indention);
226
226
 
227
227
  static int
@@ -517,7 +517,7 @@ yaml_emitter_emit_stream_start(yaml_emitter_t *emitter,
517
517
  if (emitter->best_width < 0) {
518
518
  emitter->best_width = INT_MAX;
519
519
  }
520
-
520
+
521
521
  if (!emitter->line_break) {
522
522
  emitter->line_break = YAML_LN_BREAK;
523
523
  }
@@ -607,7 +607,7 @@ yaml_emitter_emit_document_start(yaml_emitter_t *emitter,
607
607
  if (!yaml_emitter_write_indent(emitter))
608
608
  return 0;
609
609
  }
610
-
610
+
611
611
  if (event->data.document_start.tag_directives.start
612
612
  != event->data.document_start.tag_directives.end) {
613
613
  implicit = 0;
@@ -721,7 +721,7 @@ yaml_emitter_emit_document_end(yaml_emitter_t *emitter,
721
721
  }
722
722
 
723
723
  /*
724
- *
724
+ *
725
725
  * Expect a flow item node.
726
726
  */
727
727
 
@@ -1402,7 +1402,7 @@ yaml_emitter_analyze_anchor(yaml_emitter_t *emitter,
1402
1402
  {
1403
1403
  size_t anchor_length;
1404
1404
  yaml_string_t string;
1405
-
1405
+
1406
1406
  anchor_length = strlen((char *)anchor);
1407
1407
  STRING_ASSIGN(string, anchor, anchor_length);
1408
1408
 
@@ -1784,7 +1784,7 @@ yaml_emitter_write_indent(yaml_emitter_t *emitter)
1784
1784
 
1785
1785
  static int
1786
1786
  yaml_emitter_write_indicator(yaml_emitter_t *emitter,
1787
- const char *indicator, int need_whitespace,
1787
+ char *indicator, int need_whitespace,
1788
1788
  int is_whitespace, int is_indention)
1789
1789
  {
1790
1790
  size_t indicator_length;
@@ -2178,7 +2178,7 @@ yaml_emitter_write_block_scalar_hints(yaml_emitter_t *emitter,
2178
2178
  yaml_string_t string)
2179
2179
  {
2180
2180
  char indent_hint[2];
2181
- const char *chomp_hint = NULL;
2181
+ char *chomp_hint = NULL;
2182
2182
 
2183
2183
  if (IS_SPACE(string) || IS_BREAK(string))
2184
2184
  {
@@ -286,6 +286,8 @@ yaml_parser_load_scalar(yaml_parser_t *parser, yaml_event_t *first_event)
286
286
  int index;
287
287
  yaml_char_t *tag = first_event->data.scalar.tag;
288
288
 
289
+ if (!STACK_LIMIT(parser, parser->document->nodes, INT_MAX-1)) goto error;
290
+
289
291
  if (!tag || strcmp((char *)tag, "!") == 0) {
290
292
  yaml_free(tag);
291
293
  tag = yaml_strdup((yaml_char_t *)YAML_DEFAULT_SCALAR_TAG);
@@ -329,6 +331,8 @@ yaml_parser_load_sequence(yaml_parser_t *parser, yaml_event_t *first_event)
329
331
  int index, item_index;
330
332
  yaml_char_t *tag = first_event->data.sequence_start.tag;
331
333
 
334
+ if (!STACK_LIMIT(parser, parser->document->nodes, INT_MAX-1)) goto error;
335
+
332
336
  if (!tag || strcmp((char *)tag, "!") == 0) {
333
337
  yaml_free(tag);
334
338
  tag = yaml_strdup((yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG);
@@ -351,6 +355,9 @@ yaml_parser_load_sequence(yaml_parser_t *parser, yaml_event_t *first_event)
351
355
  if (!yaml_parser_parse(parser, &event)) return 0;
352
356
 
353
357
  while (event.type != YAML_SEQUENCE_END_EVENT) {
358
+ if (!STACK_LIMIT(parser,
359
+ parser->document->nodes.start[index-1].data.sequence.items,
360
+ INT_MAX-1)) return 0;
354
361
  item_index = yaml_parser_load_node(parser, &event);
355
362
  if (!item_index) return 0;
356
363
  if (!PUSH(parser,
@@ -387,6 +394,8 @@ yaml_parser_load_mapping(yaml_parser_t *parser, yaml_event_t *first_event)
387
394
  yaml_node_pair_t pair;
388
395
  yaml_char_t *tag = first_event->data.mapping_start.tag;
389
396
 
397
+ if (!STACK_LIMIT(parser, parser->document->nodes, INT_MAX-1)) goto error;
398
+
390
399
  if (!tag || strcmp((char *)tag, "!") == 0) {
391
400
  yaml_free(tag);
392
401
  tag = yaml_strdup((yaml_char_t *)YAML_DEFAULT_MAPPING_TAG);
@@ -409,6 +418,9 @@ yaml_parser_load_mapping(yaml_parser_t *parser, yaml_event_t *first_event)
409
418
  if (!yaml_parser_parse(parser, &event)) return 0;
410
419
 
411
420
  while (event.type != YAML_MAPPING_END_EVENT) {
421
+ if (!STACK_LIMIT(parser,
422
+ parser->document->nodes.start[index-1].data.mapping.pairs,
423
+ INT_MAX-1)) return 0;
412
424
  pair.key = yaml_parser_load_node(parser, &event);
413
425
  if (!pair.key) return 0;
414
426
  if (!yaml_parser_parse(parser, &event)) return 0;
@@ -1295,7 +1295,7 @@ yaml_parser_process_directives(yaml_parser_t *parser,
1295
1295
  token = PEEK_TOKEN(parser);
1296
1296
  if (!token) goto error;
1297
1297
  }
1298
-
1298
+
1299
1299
  for (default_tag_directive = default_tag_directives;
1300
1300
  default_tag_directive->handle; default_tag_directive++) {
1301
1301
  if (!yaml_parser_append_tag_directive(parser, *default_tag_directive, 1,
@@ -52,7 +52,7 @@ yaml_parser_determine_encoding(yaml_parser_t *parser)
52
52
  {
53
53
  /* Ensure that we had enough bytes in the raw buffer. */
54
54
 
55
- while (!parser->eof
55
+ while (!parser->eof
56
56
  && parser->raw_buffer.last - parser->raw_buffer.pointer < 3) {
57
57
  if (!yaml_parser_update_raw_buffer(parser)) {
58
58
  return 0;
@@ -295,7 +295,7 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
295
295
  parser->offset, value);
296
296
 
297
297
  break;
298
-
298
+
299
299
  case YAML_UTF16LE_ENCODING:
300
300
  case YAML_UTF16BE_ENCODING:
301
301
 
@@ -318,7 +318,7 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
318
318
  *
319
319
  * The following formulas are used for decoding
320
320
  * and encoding characters using surrogate pairs:
321
- *
321
+ *
322
322
  * U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF)
323
323
  * U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF)
324
324
  * W1 = 110110yyyyyyyyyy
@@ -460,6 +460,10 @@ yaml_parser_update_buffer(yaml_parser_t *parser, size_t length)
460
460
 
461
461
  }
462
462
 
463
+ if (parser->offset >= PTRDIFF_MAX)
464
+ return yaml_parser_set_reader_error(parser, "input is too long",
465
+ PTRDIFF_MAX, -1);
466
+
463
467
  return 1;
464
468
  }
465
469
 
@@ -70,7 +70,7 @@
70
70
  * %TAG !yaml! tag:yaml.org,2002:
71
71
  * ---
72
72
  *
73
- * The correspoding sequence of tokens:
73
+ * The corresponding sequence of tokens:
74
74
  *
75
75
  * STREAM-START(utf-8)
76
76
  * VERSION-DIRECTIVE(1,1)
@@ -615,11 +615,11 @@ yaml_parser_decrease_flow_level(yaml_parser_t *parser);
615
615
  */
616
616
 
617
617
  static int
618
- yaml_parser_roll_indent(yaml_parser_t *parser, int column,
619
- int number, yaml_token_type_t type, yaml_mark_t mark);
618
+ yaml_parser_roll_indent(yaml_parser_t *parser, ptrdiff_t column,
619
+ ptrdiff_t number, yaml_token_type_t type, yaml_mark_t mark);
620
620
 
621
621
  static int
622
- yaml_parser_unroll_indent(yaml_parser_t *parser, int column);
622
+ yaml_parser_unroll_indent(yaml_parser_t *parser, ptrdiff_t column);
623
623
 
624
624
  /*
625
625
  * Token fetchers.
@@ -762,7 +762,7 @@ yaml_parser_scan(yaml_parser_t *parser, yaml_token_t *token)
762
762
  }
763
763
 
764
764
  /* Fetch the next token from the queue. */
765
-
765
+
766
766
  *token = DEQUEUE(parser, parser->tokens);
767
767
  parser->token_available = 0;
768
768
  parser->tokens_parsed ++;
@@ -1103,7 +1103,7 @@ yaml_parser_save_simple_key(yaml_parser_t *parser)
1103
1103
  */
1104
1104
 
1105
1105
  int required = (!parser->flow_level
1106
- && parser->indent == (int)parser->mark.column);
1106
+ && parser->indent == (ptrdiff_t)parser->mark.column);
1107
1107
 
1108
1108
  /*
1109
1109
  * A simple key is required only when it is the first token in the current
@@ -1121,7 +1121,7 @@ yaml_parser_save_simple_key(yaml_parser_t *parser)
1121
1121
  yaml_simple_key_t simple_key;
1122
1122
  simple_key.possible = 1;
1123
1123
  simple_key.required = required;
1124
- simple_key.token_number =
1124
+ simple_key.token_number =
1125
1125
  parser->tokens_parsed + (parser->tokens.tail - parser->tokens.head);
1126
1126
  simple_key.mark = parser->mark;
1127
1127
 
@@ -1176,6 +1176,11 @@ yaml_parser_increase_flow_level(yaml_parser_t *parser)
1176
1176
 
1177
1177
  /* Increase the flow level. */
1178
1178
 
1179
+ if (parser->flow_level == INT_MAX) {
1180
+ parser->error = YAML_MEMORY_ERROR;
1181
+ return 0;
1182
+ }
1183
+
1179
1184
  parser->flow_level++;
1180
1185
 
1181
1186
  return 1;
@@ -1202,12 +1207,12 @@ yaml_parser_decrease_flow_level(yaml_parser_t *parser)
1202
1207
  * Push the current indentation level to the stack and set the new level
1203
1208
  * the current column is greater than the indentation level. In this case,
1204
1209
  * append or insert the specified token into the token queue.
1205
- *
1210
+ *
1206
1211
  */
1207
1212
 
1208
1213
  static int
1209
- yaml_parser_roll_indent(yaml_parser_t *parser, int column,
1210
- int number, yaml_token_type_t type, yaml_mark_t mark)
1214
+ yaml_parser_roll_indent(yaml_parser_t *parser, ptrdiff_t column,
1215
+ ptrdiff_t number, yaml_token_type_t type, yaml_mark_t mark)
1211
1216
  {
1212
1217
  yaml_token_t token;
1213
1218
 
@@ -1226,6 +1231,11 @@ yaml_parser_roll_indent(yaml_parser_t *parser, int column,
1226
1231
  if (!PUSH(parser, parser->indents, parser->indent))
1227
1232
  return 0;
1228
1233
 
1234
+ if (column > INT_MAX) {
1235
+ parser->error = YAML_MEMORY_ERROR;
1236
+ return 0;
1237
+ }
1238
+
1229
1239
  parser->indent = column;
1230
1240
 
1231
1241
  /* Create a token and insert it into the queue. */
@@ -1248,13 +1258,13 @@ yaml_parser_roll_indent(yaml_parser_t *parser, int column,
1248
1258
 
1249
1259
  /*
1250
1260
  * Pop indentation levels from the indents stack until the current level
1251
- * becomes less or equal to the column. For each indentation level, append
1261
+ * becomes less or equal to the column. For each intendation level, append
1252
1262
  * the BLOCK-END token.
1253
1263
  */
1254
1264
 
1255
1265
 
1256
1266
  static int
1257
- yaml_parser_unroll_indent(yaml_parser_t *parser, int column)
1267
+ yaml_parser_unroll_indent(yaml_parser_t *parser, ptrdiff_t column)
1258
1268
  {
1259
1269
  yaml_token_t token;
1260
1270
 
@@ -1263,7 +1273,7 @@ yaml_parser_unroll_indent(yaml_parser_t *parser, int column)
1263
1273
  if (parser->flow_level)
1264
1274
  return 1;
1265
1275
 
1266
- /* Loop through the indentation levels in the stack. */
1276
+ /* Loop through the intendation levels in the stack. */
1267
1277
 
1268
1278
  while (parser->indent > column)
1269
1279
  {
@@ -1935,7 +1945,7 @@ yaml_parser_scan_to_next_token(yaml_parser_t *parser)
1935
1945
  *
1936
1946
  * - in the flow context;
1937
1947
  * - in the block context, but not at the beginning of the line or
1938
- * after '-', '?', or ':' (complex value).
1948
+ * after '-', '?', or ':' (complex value).
1939
1949
  */
1940
1950
 
1941
1951
  if (!CACHE(parser, 1)) return 0;
@@ -2574,7 +2584,7 @@ yaml_parser_scan_tag_uri(yaml_parser_t *parser, int directive,
2574
2584
 
2575
2585
  /* Resize the string to include the head. */
2576
2586
 
2577
- while (string.end - string.start <= (int)length) {
2587
+ while ((size_t)(string.end - string.start) <= length) {
2578
2588
  if (!yaml_string_extend(&string.start, &string.pointer, &string.end)) {
2579
2589
  parser->error = YAML_MEMORY_ERROR;
2580
2590
  goto error;
@@ -2769,15 +2779,15 @@ yaml_parser_scan_block_scalar(yaml_parser_t *parser, yaml_token_t *token,
2769
2779
 
2770
2780
  if (IS_DIGIT(parser->buffer))
2771
2781
  {
2772
- /* Check that the indentation is greater than 0. */
2782
+ /* Check that the intendation is greater than 0. */
2773
2783
 
2774
2784
  if (CHECK(parser->buffer, '0')) {
2775
2785
  yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
2776
- start_mark, "found an indentation indicator equal to 0");
2786
+ start_mark, "found an intendation indicator equal to 0");
2777
2787
  goto error;
2778
2788
  }
2779
2789
 
2780
- /* Get the indentation level and eat the indicator. */
2790
+ /* Get the intendation level and eat the indicator. */
2781
2791
 
2782
2792
  increment = AS_DIGIT(parser->buffer);
2783
2793
 
@@ -2791,7 +2801,7 @@ yaml_parser_scan_block_scalar(yaml_parser_t *parser, yaml_token_t *token,
2791
2801
  {
2792
2802
  if (CHECK(parser->buffer, '0')) {
2793
2803
  yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
2794
- start_mark, "found an indentation indicator equal to 0");
2804
+ start_mark, "found an intendation indicator equal to 0");
2795
2805
  goto error;
2796
2806
  }
2797
2807
 
@@ -2841,7 +2851,7 @@ yaml_parser_scan_block_scalar(yaml_parser_t *parser, yaml_token_t *token,
2841
2851
 
2842
2852
  end_mark = parser->mark;
2843
2853
 
2844
- /* Set the indentation level if it was specified. */
2854
+ /* Set the intendation level if it was specified. */
2845
2855
 
2846
2856
  if (increment) {
2847
2857
  indent = parser->indent >= 0 ? parser->indent+increment : increment;
@@ -2907,7 +2917,7 @@ yaml_parser_scan_block_scalar(yaml_parser_t *parser, yaml_token_t *token,
2907
2917
 
2908
2918
  if (!READ_LINE(parser, leading_break)) goto error;
2909
2919
 
2910
- /* Eat the following indentation spaces and line breaks. */
2920
+ /* Eat the following intendation spaces and line breaks. */
2911
2921
 
2912
2922
  if (!yaml_parser_scan_block_scalar_breaks(parser,
2913
2923
  &indent, &trailing_breaks, start_mark, &end_mark)) goto error;
@@ -2942,8 +2952,8 @@ error:
2942
2952
  }
2943
2953
 
2944
2954
  /*
2945
- * Scan indentation spaces and line breaks for a block scalar. Determine the
2946
- * indentation level if needed.
2955
+ * Scan intendation spaces and line breaks for a block scalar. Determine the
2956
+ * intendation level if needed.
2947
2957
  */
2948
2958
 
2949
2959
  static int
@@ -2955,11 +2965,11 @@ yaml_parser_scan_block_scalar_breaks(yaml_parser_t *parser,
2955
2965
 
2956
2966
  *end_mark = parser->mark;
2957
2967
 
2958
- /* Eat the indentation spaces and line breaks. */
2968
+ /* Eat the intendation spaces and line breaks. */
2959
2969
 
2960
2970
  while (1)
2961
2971
  {
2962
- /* Eat the indentation spaces. */
2972
+ /* Eat the intendation spaces. */
2963
2973
 
2964
2974
  if (!CACHE(parser, 1)) return 0;
2965
2975
 
@@ -2972,12 +2982,12 @@ yaml_parser_scan_block_scalar_breaks(yaml_parser_t *parser,
2972
2982
  if ((int)parser->mark.column > max_indent)
2973
2983
  max_indent = (int)parser->mark.column;
2974
2984
 
2975
- /* Check for a tab character messing the indentation. */
2985
+ /* Check for a tab character messing the intendation. */
2976
2986
 
2977
2987
  if ((!*indent || (int)parser->mark.column < *indent)
2978
2988
  && IS_TAB(parser->buffer)) {
2979
2989
  return yaml_parser_set_scanner_error(parser, "while scanning a block scalar",
2980
- start_mark, "found a tab character where an indentation space is expected");
2990
+ start_mark, "found a tab character where an intendation space is expected");
2981
2991
  }
2982
2992
 
2983
2993
  /* Have we found a non-empty line? */
@@ -3001,7 +3011,7 @@ yaml_parser_scan_block_scalar_breaks(yaml_parser_t *parser,
3001
3011
  *indent = 1;
3002
3012
  }
3003
3013
 
3004
- return 1;
3014
+ return 1;
3005
3015
  }
3006
3016
 
3007
3017
  /*
@@ -3498,12 +3508,12 @@ yaml_parser_scan_plain_scalar(yaml_parser_t *parser, yaml_token_t *token)
3498
3508
  {
3499
3509
  if (IS_BLANK(parser->buffer))
3500
3510
  {
3501
- /* Check for tab character that abuse indentation. */
3511
+ /* Check for tab character that abuse intendation. */
3502
3512
 
3503
3513
  if (leading_blanks && (int)parser->mark.column < indent
3504
3514
  && IS_TAB(parser->buffer)) {
3505
3515
  yaml_parser_set_scanner_error(parser, "while scanning a plain scalar",
3506
- start_mark, "found a tab character that violates indentation");
3516
+ start_mark, "found a tab character that violate intendation");
3507
3517
  goto error;
3508
3518
  }
3509
3519
 
@@ -3536,7 +3546,7 @@ yaml_parser_scan_plain_scalar(yaml_parser_t *parser, yaml_token_t *token)
3536
3546
  if (!CACHE(parser, 1)) goto error;
3537
3547
  }
3538
3548
 
3539
- /* Check indentation level. */
3549
+ /* Check intendation level. */
3540
3550
 
3541
3551
  if (!parser->flow_level && (int)parser->mark.column < indent)
3542
3552
  break;
@@ -74,7 +74,7 @@ yaml_emitter_flush(yaml_emitter_t *emitter)
74
74
  unsigned int value;
75
75
  size_t k;
76
76
 
77
- /*
77
+ /*
78
78
  * See the "reader.c" code for more details on UTF-8 encoding. Note
79
79
  * that we assume that the buffer contains a valid UTF-8 sequence.
80
80
  */
@@ -1,6 +1,3 @@
1
- #ifdef RUBY_EXTCONF_H
2
- #include RUBY_EXTCONF_H
3
- #endif
4
1
 
5
2
  #if HAVE_CONFIG_H
6
3
  #include <config.h>
@@ -10,6 +7,17 @@
10
7
 
11
8
  #include <assert.h>
12
9
  #include <limits.h>
10
+ #include <stddef.h>
11
+
12
+ #ifndef _MSC_VER
13
+ #include <stdint.h>
14
+ #else
15
+ #ifdef _WIN64
16
+ #define PTRDIFF_MAX _I64_MAX
17
+ #else
18
+ #define PTRDIFF_MAX INT_MAX
19
+ #endif
20
+ #endif
13
21
 
14
22
  /*
15
23
  * Memory management.
@@ -231,9 +239,9 @@ yaml_string_join(
231
239
  (string).pointer[offset] <= (yaml_char_t) 'f') ? \
232
240
  ((string).pointer[offset] - (yaml_char_t) 'a' + 10) : \
233
241
  ((string).pointer[offset] - (yaml_char_t) '0'))
234
-
242
+
235
243
  #define AS_HEX(string) AS_HEX_AT((string),0)
236
-
244
+
237
245
  /*
238
246
  * Check if the character is ASCII.
239
247
  */
@@ -424,6 +432,12 @@ yaml_queue_extend(void **start, void **head, void **tail, void **end);
424
432
  #define STACK_EMPTY(context,stack) \
425
433
  ((stack).start == (stack).top)
426
434
 
435
+ #define STACK_LIMIT(context,stack,size) \
436
+ ((stack).top - (stack).start < (size) ? \
437
+ 1 : \
438
+ ((context)->error = YAML_MEMORY_ERROR, \
439
+ 0))
440
+
427
441
  #define PUSH(context,stack,value) \
428
442
  (((stack).top != (stack).end \
429
443
  || yaml_stack_extend((void **)&(stack).start, \
data/lib/psych.rb CHANGED
@@ -14,6 +14,7 @@ require 'psych/stream'
14
14
  require 'psych/json/tree_builder'
15
15
  require 'psych/json/stream'
16
16
  require 'psych/handlers/document_stream'
17
+ require 'psych/class_loader'
17
18
 
18
19
  ###
19
20
  # = Overview
@@ -71,7 +72,7 @@ require 'psych/handlers/document_stream'
71
72
  # ==== Exception handling
72
73
  #
73
74
  # begin
74
- # # The second argument chnages only the exception contents
75
+ # # The second argument changes only the exception contents
75
76
  # Psych.parse("--- `", "file.txt")
76
77
  # rescue Psych::SyntaxError => ex
77
78
  # ex.file # => 'file.txt'
@@ -135,7 +136,7 @@ require 'psych/handlers/document_stream'
135
136
  # ==== Exception handling
136
137
  #
137
138
  # begin
138
- # # The second argument chnages only the exception contents
139
+ # # The second argument changes only the exception contents
139
140
  # Psych.parse("--- `", "file.txt")
140
141
  # rescue Psych::SyntaxError => ex
141
142
  # ex.file # => 'file.txt'
@@ -216,7 +217,7 @@ require 'psych/handlers/document_stream'
216
217
 
217
218
  module Psych
218
219
  # The version is Psych you're using
219
- VERSION = '2.0.2'
220
+ VERSION = '2.0.3'
220
221
 
221
222
  # The version of libyaml Psych is using
222
223
  LIBYAML_VERSION = Psych.libyaml_version.join '.'
@@ -56,7 +56,7 @@ module Psych
56
56
  # Is this sequence started implicitly?
57
57
  attr_accessor :implicit
58
58
 
59
- # The sequece style used
59
+ # The sequence style used
60
60
  attr_accessor :style
61
61
 
62
62
  ###
@@ -181,9 +181,11 @@ module Psych
181
181
  klass = class_loader.struct
182
182
  members = o.children.map { |c| accept c }
183
183
  h = Hash[*members]
184
- klass.new(*h.map { |k,v|
184
+ s = klass.new(*h.map { |k,v|
185
185
  class_loader.symbolize k
186
186
  }).new(*h.map { |k,v| v })
187
+ register(o, s)
188
+ s
187
189
  end
188
190
 
189
191
  when /^!ruby\/object:?(.*)?$/
@@ -284,7 +284,7 @@ module Psych
284
284
  quote = false
285
285
  elsif o =~ /\n/
286
286
  style = Nodes::Scalar::LITERAL
287
- elsif o =~ /^\W/
287
+ elsif o =~ /^\W[^"]*$/
288
288
  style = Nodes::Scalar::DOUBLE_QUOTED
289
289
  else
290
290
  unless String === @ss.tokenize(o)
@@ -26,6 +26,10 @@ module Psych
26
26
  assert_reference_trip DateTime.now
27
27
  end
28
28
 
29
+ def test_struct_has_references
30
+ assert_reference_trip Struct.new(:foo).new(1)
31
+ end
32
+
29
33
  def assert_reference_trip obj
30
34
  yml = Psych.dump([obj, obj])
31
35
  assert_match(/\*-?\d+/, yml)
@@ -15,6 +15,10 @@ module Psych
15
15
  end
16
16
  end
17
17
 
18
+ def test_no_doublequotes_with_special_characters
19
+ assert_equal 2, Psych.dump(%Q{<%= ENV["PATH"] %>}).count('"')
20
+ end
21
+
18
22
  def test_doublequotes_when_there_is_a_single
19
23
  yaml = Psych.dump "@123'abc"
20
24
  assert_match(/---\s*"/, yaml)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: psych
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Patterson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-26 00:00:00.000000000 Z
11
+ date: 2014-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.6'
47
+ version: '3.8'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.6'
54
+ version: '3.8'
55
55
  description: |-
56
56
  Psych is a YAML parser and emitter. Psych leverages libyaml[http://pyyaml.org/wiki/LibYAML]
57
57
  for its YAML parsing and emitting capabilities. In addition to wrapping
@@ -68,6 +68,7 @@ extra_rdoc_files:
68
68
  - README.rdoc
69
69
  files:
70
70
  - ".autotest"
71
+ - ".gemtest"
71
72
  - ".travis.yml"
72
73
  - CHANGELOG.rdoc
73
74
  - Manifest.txt
@@ -180,7 +181,6 @@ files:
180
181
  - test/psych/visitors/test_emitter.rb
181
182
  - test/psych/visitors/test_to_ruby.rb
182
183
  - test/psych/visitors/test_yaml_tree.rb
183
- - ".gemtest"
184
184
  homepage: http://github.com/tenderlove/psych
185
185
  licenses:
186
186
  - MIT
@@ -203,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
203
  version: '0'
204
204
  requirements: []
205
205
  rubyforge_project: psych
206
- rubygems_version: 2.0.2
206
+ rubygems_version: 2.2.1
207
207
  signing_key:
208
208
  specification_version: 4
209
209
  summary: Psych is a YAML parser and emitter