]> granicus.if.org Git - python/commitdiff
Patch from SF bug #472956: UMR when there is a syntax error (Neal Norwitz)
authorGuido van Rossum <guido@python.org>
Sat, 20 Oct 2001 14:27:56 +0000 (14:27 +0000)
committerGuido van Rossum <guido@python.org>
Sat, 20 Oct 2001 14:27:56 +0000 (14:27 +0000)
    perrdetail.token is unitialized when there is a syntax
    error in a file.

Parser/parsetok.c

index 386b82fea6177115a9daaa70e7f968f6df5ed99a..bdd51f380bf8acc7e1f851a79e8df518df1c9e07 100644 (file)
@@ -14,6 +14,7 @@ int Py_TabcheckFlag;
 
 /* Forward */
 static node *parsetok(struct tok_state *, grammar *, int, perrdetail *, int);
+static void initerr(perrdetail *err_ret);
 
 /* Parse input coming from a string.  Return error code, print some errors. */
 node *
@@ -28,13 +29,7 @@ PyParser_ParseStringFlags(char *s, grammar *g, int start,
 {
        struct tok_state *tok;
 
-       err_ret->error = E_OK;
-       err_ret->filename = NULL;
-       err_ret->lineno = 0;
-       err_ret->offset = 0;
-       err_ret->text = NULL;
-       err_ret->token = -1;
-       err_ret->expected = -1;
+       initerr(err_ret);
 
        if ((tok = PyTokenizer_FromString(s)) == NULL) {
                err_ret->error = E_NOMEM;
@@ -68,11 +63,7 @@ PyParser_ParseFileFlags(FILE *fp, char *filename, grammar *g, int start,
 {
        struct tok_state *tok;
 
-       err_ret->error = E_OK;
-       err_ret->filename = filename;
-       err_ret->lineno = 0;
-       err_ret->offset = 0;
-       err_ret->text = NULL;
+       initerr(err_ret);
 
        if ((tok = PyTokenizer_FromFile(fp, ps1, ps2)) == NULL) {
                err_ret->error = E_NOMEM;
@@ -185,3 +176,15 @@ parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret,
 
        return n;
 }
+
+static void
+initerr(perrdetail *err_ret)
+{
+       err_ret->error = E_OK;
+       err_ret->filename = NULL;
+       err_ret->lineno = 0;
+       err_ret->offset = 0;
+       err_ret->text = NULL;
+       err_ret->token = -1;
+       err_ret->expected = -1;
+}