[pypy-commit] pypy default: Remove 'field_builder.append', which can crash the flow space
arigo
noreply at buildbot.pypy.org
Mon Sep 24 18:10:31 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r57506:6ba378006e61
Date: 2012-09-24 17:23 +0200
http://bitbucket.org/pypy/pypy/changeset/6ba378006e61/
Log: Remove 'field_builder.append', which can crash the flow space
depending on order issues with a 'None.append'.
diff --git a/pypy/module/_csv/interp_reader.py b/pypy/module/_csv/interp_reader.py
--- a/pypy/module/_csv/interp_reader.py
+++ b/pypy/module/_csv/interp_reader.py
@@ -32,9 +32,11 @@
raise OperationError(w_error, space.wrap(msg))
error._dont_inline_ = True
- def check_limit(self, field_builder):
+ def add_char(self, field_builder, c):
+ assert field_builder is not None
if field_builder.getlength() >= field_limit.limit:
raise self.error("field larger than field limit")
+ field_builder.append(c)
def save_field(self, field_builder):
field = field_builder.build()
@@ -106,12 +108,11 @@
# begin new unquoted field
if dialect.quoting == QUOTE_NONNUMERIC:
self.numeric_field = True
- field_builder.append(c)
+ self.add_char(field_builder, c)
state = IN_FIELD
elif state == ESCAPED_CHAR:
- self.check_limit(field_builder)
- field_builder.append(c)
+ self.add_char(field_builder, c)
state = IN_FIELD
elif state == IN_FIELD:
@@ -129,8 +130,7 @@
state = START_FIELD
else:
# normal character - save in field
- self.check_limit(field_builder)
- field_builder.append(c)
+ self.add_char(field_builder, c)
elif state == IN_QUOTED_FIELD:
# in quoted field
@@ -147,12 +147,10 @@
state = IN_FIELD
else:
# normal character - save in field
- self.check_limit(field_builder)
- field_builder.append(c)
+ self.add_char(field_builder, c)
elif state == ESCAPE_IN_QUOTED_FIELD:
- self.check_limit(field_builder)
- field_builder.append(c)
+ self.add_char(field_builder, c)
state = IN_QUOTED_FIELD
elif state == QUOTE_IN_QUOTED_FIELD:
@@ -160,8 +158,7 @@
if (dialect.quoting != QUOTE_NONE and
c == dialect.quotechar):
# save "" as "
- self.check_limit(field_builder)
- field_builder.append(c)
+ self.add_char(field_builder, c)
state = IN_QUOTED_FIELD
elif c == dialect.delimiter:
# save field - wait for new field
@@ -172,8 +169,7 @@
self.save_field(field_builder)
state = EAT_CRNL
elif not dialect.strict:
- self.check_limit(field_builder)
- field_builder.append(c)
+ self.add_char(field_builder, c)
state = IN_FIELD
else:
# illegal
@@ -192,14 +188,12 @@
self.save_field(field_builder)
break
elif state == ESCAPED_CHAR:
- self.check_limit(field_builder)
- field_builder.append('\n')
+ self.add_char(field_builder, '\n')
state = IN_FIELD
elif state == IN_QUOTED_FIELD:
pass
elif state == ESCAPE_IN_QUOTED_FIELD:
- self.check_limit(field_builder)
- field_builder.append('\n')
+ self.add_char(field_builder, '\n')
state = IN_QUOTED_FIELD
else:
break
More information about the pypy-commit
mailing list