diff options
Diffstat (limited to 'src/json.c')
-rw-r--r-- | src/json.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/json.c b/src/json.c index 5f5440ec3..6ee51d39c 100644 --- a/src/json.c +++ b/src/json.c @@ -627,8 +627,33 @@ static void jsonAppendString(JsonString *p, const char *zIn, u32 N){ p->zBuf[p->nUsed++] = '"'; while( 1 /*exit-by-break*/ ){ k = 0; - while( k+1<N && jsonIsOk[z[k]] && jsonIsOk[z[k+1]] ){ k += 2; } /* <--, */ - while( k<N && jsonIsOk[z[k]] ){ k++; } /* <-- loop unwound for speed */ + /* The following while() is the 4-way unwound equivalent of + ** + ** while( k<N && jsonIsOk[z[k]] ){ k++; } + */ + while( 1 /* Exit by break */ ){ + if( k+3>=N ){ + while( k<N && jsonIsOk[z[k]] ){ k++; } + break; + } + if( !jsonIsOk[z[k]] ){ + break; + } + if( !jsonIsOk[z[k+1]] ){ + k += 1; + break; + } + if( !jsonIsOk[z[k+2]] ){ + k += 2; + break; + } + if( !jsonIsOk[z[k+3]] ){ + k += 3; + break; + }else{ + k += 4; + } + } if( k>=N ){ if( k>0 ){ memcpy(&p->zBuf[p->nUsed], z, k); |