OSDN Git Service

fix state transition bug.
authorornse01 <ornse01@users.sourceforge.jp>
Sat, 2 Oct 2010 07:09:03 +0000 (07:09 +0000)
committerornse01 <ornse01@users.sourceforge.jp>
Sat, 2 Oct 2010 07:09:03 +0000 (07:09 +0000)
git-svn-id: http://svn.sourceforge.jp/svnroot/bchan/bchan/trunk@128 20a0b8eb-f62a-4a12-8fe1-b598822500fb

src/tadimf.c

index edcc4b7..6d646b2 100644 (file)
@@ -96,7 +96,7 @@ EXPORT W timfparser_next(timfparser_t *timf, W *headername, UB **bin, W *len)
                                } else if (ret != TCTOKENCHECKER_CONTINUE) {
                                        timf->state = TIMFPARSER_STATE_SKIP_HEADER;
                                } else {
-                                       timf->state = TIMFPARSER_STATE_SEARCH_HEADER_FIELDVALUE;
+                                       timf->state = TIMFPARSER_STATE_READ_HEADER_FIELDNAME;
                                }
                                break;
                        case TIMFPARSER_STATE_SKIP_HEADER:
@@ -105,21 +105,27 @@ EXPORT W timfparser_next(timfparser_t *timf, W *headername, UB **bin, W *len)
                                }
                                break;
                        case TIMFPARSER_STATE_READ_HEADER_FIELDNAME:
+                               if (ch == TK_NL) {
+                                       timf->state = TIMFPARSER_STATE_SEARCH_HEADER;
+                                       break;
+                               }
                                ret = tctokenchecker_inputchar(&timf->headerchecker, ch, &val);
                                if (ret == TCTOKENCHECKER_DETERMINE) {
-                                       timf->state = TIMFPARSER_STATE_READ_HEADER_FIELDVALUE;
+                                       timf->state = TIMFPARSER_STATE_SEARCH_HEADER_FIELDVALUE;
                                        timf->headertype = val;
                                } else if (ret != TCTOKENCHECKER_CONTINUE) {
                                        timf->state = TIMFPARSER_STATE_SKIP_HEADER;
-                               } else {
-                                       timf->state = TIMFPARSER_STATE_SEARCH_HEADER_FIELDVALUE;
                                }
                                break;
                        case TIMFPARSER_STATE_SEARCH_HEADER_FIELDVALUE:
                                if (ch == TK_KSP) {
                                        break;
                                }
-                               timf->state = TIMFPARSER_STATE_READ_HEADER_FIELDNAME;
+                               if (ch == TK_NL) {
+                                       timf->state = TIMFPARSER_STATE_SEARCH_HEADER;
+                                       break;
+                               }
+                               timf->state = TIMFPARSER_STATE_READ_HEADER_FIELDVALUE;
                                *headername = timf->headertype;
                                if (timf->ishankaku == True) {
                                        memcpy(timf->buf, timf->chratio, 10);