Hex Artifact Content
Not logged in

Artifact 4be73b381720dd41122992c32af5ae34414ed3e2:

Attachment "manifest_parse_fix.diff" to ticket [be56c89def] added by anonymous 2010-10-16 10:49:32.
0000: 49 6e 64 65 78 3a 20 73 72 63 2f 6d 61 6e 69 66  Index: src/manif
0010: 65 73 74 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  est.c.==========
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 2d 2d 2d 20 73 72  =========.--- sr
0060: 63 2f 6d 61 6e 69 66 65 73 74 2e 63 0a 2b 2b 2b  c/manifest.c.+++
0070: 20 73 72 63 2f 6d 61 6e 69 66 65 73 74 2e 63 0a   src/manifest.c.
0080: 40 40 20 2d 31 39 39 2c 31 31 20 2b 31 39 39 2c  @@ -199,11 +199,
0090: 31 31 20 40 40 0a 20 2a 2f 0a 20 69 6e 74 20 6d  11 @@. */. int m
00a0: 61 6e 69 66 65 73 74 5f 70 61 72 73 65 28 4d 61  anifest_parse(Ma
00b0: 6e 69 66 65 73 74 20 2a 70 2c 20 42 6c 6f 62 20  nifest *p, Blob 
00c0: 2a 70 43 6f 6e 74 65 6e 74 29 7b 0a 20 20 20 69  *pContent){.   i
00d0: 6e 74 20 73 65 65 6e 48 65 61 64 65 72 20 3d 20  nt seenHeader = 
00e0: 30 3b 0a 20 20 20 69 6e 74 20 73 65 65 6e 5a 20  0;.   int seenZ 
00f0: 3d 20 30 3b 0a 20 20 20 69 6e 74 20 69 2c 20 6c  = 0;.   int i, l
0100: 69 6e 65 4e 6f 3d 30 3b 0a 2d 20 20 42 6c 6f 62  ineNo=0;.-  Blob
0110: 20 6c 69 6e 65 2c 20 74 6f 6b 65 6e 2c 20 61 31   line, token, a1
0120: 2c 20 61 32 2c 20 61 33 2c 20 61 34 3b 0a 2b 20  , a2, a3, a4;.+ 
0130: 20 42 6c 6f 62 20 69 6e 70 75 74 6c 69 6e 65 2c   Blob inputline,
0140: 20 6c 69 6e 65 2c 20 74 6f 6b 65 6e 2c 20 61 31   line, token, a1
0150: 2c 20 61 32 2c 20 61 33 2c 20 61 34 3b 0a 20 20  , a2, a3, a4;.  
0160: 20 63 68 61 72 20 63 50 72 65 76 54 79 70 65 20   char cPrevType 
0170: 3d 20 30 3b 0a 20 0a 20 20 20 6d 65 6d 73 65 74  = 0;. .   memset
0180: 28 70 2c 20 30 2c 20 73 69 7a 65 6f 66 28 2a 70  (p, 0, sizeof(*p
0190: 29 29 3b 0a 20 20 20 6d 65 6d 63 70 79 28 26 70  ));.   memcpy(&p
01a0: 2d 3e 63 6f 6e 74 65 6e 74 2c 20 70 43 6f 6e 74  ->content, pCont
01b0: 65 6e 74 2c 20 73 69 7a 65 6f 66 28 70 2d 3e 63  ent, sizeof(p->c
01c0: 6f 6e 74 65 6e 74 29 29 3b 0a 20 20 20 62 6c 6f  ontent));.   blo
01d0: 62 5f 7a 65 72 6f 28 70 43 6f 6e 74 65 6e 74 29  b_zero(pContent)
01e0: 3b 0a 40 40 20 2d 32 31 31 2c 31 31 20 2b 32 31  ;.@@ -211,11 +21
01f0: 31 2c 31 32 20 40 40 0a 20 0a 20 20 20 62 6c 6f  1,12 @@. .   blo
0200: 62 5f 7a 65 72 6f 28 26 61 31 29 3b 0a 20 20 20  b_zero(&a1);.   
0210: 62 6c 6f 62 5f 7a 65 72 6f 28 26 61 32 29 3b 0a  blob_zero(&a2);.
0220: 20 20 20 62 6c 6f 62 5f 7a 65 72 6f 28 26 61 33     blob_zero(&a3
0230: 29 3b 0a 20 20 20 6d 64 35 73 75 6d 5f 69 6e 69  );.   md5sum_ini
0240: 74 28 29 3b 0a 2d 20 20 77 68 69 6c 65 28 20 62  t();.-  while( b
0250: 6c 6f 62 5f 6c 69 6e 65 28 70 43 6f 6e 74 65 6e  lob_line(pConten
0260: 74 2c 20 26 6c 69 6e 65 29 20 29 7b 0a 2b 20 20  t, &line) ){.+  
0270: 77 68 69 6c 65 28 20 62 6c 6f 62 5f 6c 69 6e 65  while( blob_line
0280: 28 70 43 6f 6e 74 65 6e 74 2c 20 26 69 6e 70 75  (pContent, &inpu
0290: 74 6c 69 6e 65 29 20 29 7b 0a 2b 20 20 20 20 62  tline) ){.+    b
02a0: 6c 6f 62 5f 63 6f 70 79 28 26 6c 69 6e 65 2c 20  lob_copy(&line, 
02b0: 26 69 6e 70 75 74 6c 69 6e 65 29 3b 0a 20 20 20  &inputline);.   
02c0: 20 20 63 68 61 72 20 2a 7a 20 3d 20 62 6c 6f 62    char *z = blob
02d0: 5f 62 75 66 66 65 72 28 26 6c 69 6e 65 29 3b 0a  _buffer(&line);.
02e0: 20 20 20 20 20 6c 69 6e 65 4e 6f 2b 2b 3b 0a 20       lineNo++;. 
02f0: 20 20 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 2d      if( z[0]=='-
0300: 27 20 29 7b 0a 20 20 20 20 20 20 20 69 66 28 20  ' ){.       if( 
0310: 73 74 72 6e 63 6d 70 28 7a 2c 20 22 2d 2d 2d 2d  strncmp(z, "----
0320: 2d 42 45 47 49 4e 20 50 47 50 20 22 2c 20 31 35  -BEGIN PGP ", 15
0330: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
0340: 20 67 6f 74 6f 20 6d 61 6e 69 66 65 73 74 5f 73   goto manifest_s
0350: 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 40 40 20  yntax_error;.@@ 
0360: 2d 37 34 36 2c 31 36 20 2b 37 34 37 2c 31 38 20  -746,16 +747,18 
0370: 40 40 0a 20 20 20 20 20 69 66 28 20 70 2d 3e 7a  @@.     if( p->z
0380: 57 69 6b 69 54 69 74 6c 65 20 29 20 67 6f 74 6f  WikiTitle ) goto
0390: 20 6d 61 6e 69 66 65 73 74 5f 73 79 6e 74 61 78   manifest_syntax
03a0: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 69 66 28  _error;.     if(
03b0: 20 70 2d 3e 7a 54 69 63 6b 65 74 55 75 69 64 20   p->zTicketUuid 
03c0: 29 20 67 6f 74 6f 20 6d 61 6e 69 66 65 73 74 5f  ) goto manifest_
03d0: 73 79 6e 74 61 78 5f 65 72 72 6f 72 3b 0a 20 20  syntax_error;.  
03e0: 20 20 20 70 2d 3e 74 79 70 65 20 3d 20 43 46 54     p->type = CFT
03f0: 59 50 45 5f 4d 41 4e 49 46 45 53 54 3b 0a 20 20  YPE_MANIFEST;.  
0400: 20 7d 0a 20 20 20 6d 64 35 73 75 6d 5f 69 6e 69   }.   md5sum_ini
0410: 74 28 29 3b 0a 2b 20 20 62 6c 6f 62 5f 72 65 73  t();.+  blob_res
0420: 65 74 28 26 6c 69 6e 65 29 3b 0a 20 20 20 72 65  et(&line);.   re
0430: 74 75 72 6e 20 31 3b 0a 20 0a 20 6d 61 6e 69 66  turn 1;. . manif
0440: 65 73 74 5f 73 79 6e 74 61 78 5f 65 72 72 6f 72  est_syntax_error
0450: 3a 0a 20 20 20 2f 2a 66 70 72 69 6e 74 66 28 73  :.   /*fprintf(s
0460: 74 64 65 72 72 2c 20 22 4d 61 6e 69 66 65 73 74  tderr, "Manifest
0470: 20 65 72 72 6f 72 20 6f 6e 20 6c 69 6e 65 20 25   error on line %
0480: 69 5c 6e 22 2c 20 6c 69 6e 65 4e 6f 29 3b 66 66  i\n", lineNo);ff
0490: 6c 75 73 68 28 73 74 64 65 72 72 29 3b 2a 2f 0a  lush(stderr);*/.
04a0: 20 20 20 6d 64 35 73 75 6d 5f 69 6e 69 74 28 29     md5sum_init()
04b0: 3b 0a 20 20 20 6d 61 6e 69 66 65 73 74 5f 63 6c  ;.   manifest_cl
04c0: 65 61 72 28 70 29 3b 0a 2b 20 20 62 6c 6f 62 5f  ear(p);.+  blob_
04d0: 72 65 73 65 74 28 26 6c 69 6e 65 29 3b 0a 20 20  reset(&line);.  
04e0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 7d 0a 20 0a   return 0;. }. .
04f0: 20 2f 2a 0a 20 2a 2a 20 43 4f 4d 4d 41 4e 44 3a   /*. ** COMMAND:
0500: 20 74 65 73 74 2d 70 61 72 73 65 2d 6d 61 6e 69   test-parse-mani
0510: 66 65 73 74 0a 0a                                fest..