Fossil SCM
Experimental refinements to the fix on this branch to make it slightly more efficient.
Commit
2172c51377e22644aa0734101ed07271e798508193c480081d92caec0dcf2b40
Parent
7489c8b9320e5c3…
1 file changed
+8
-5
+8
-5
| --- src/printf.c | ||
| +++ src/printf.c | ||
| @@ -705,16 +705,19 @@ | ||
| 705 | 705 | case etDYNSTRING: { |
| 706 | 706 | int limit = flag_alternateform ? va_arg(ap,int) : -1; |
| 707 | 707 | bufpt = va_arg(ap,char*); |
| 708 | 708 | if( bufpt==0 ){ |
| 709 | 709 | bufpt = ""; |
| 710 | - }else if( xtype==etDYNSTRING ){ | |
| 711 | - zExtra = bufpt; | |
| 712 | - }else if( xtype==etSTRINGID && validate16(bufpt, -1) ){ | |
| 713 | - precision = hash_digits(flag_altform2); | |
| 710 | + length = 0; | |
| 711 | + }else{ | |
| 712 | + length = StrNLen32(bufpt, limit); | |
| 713 | + if( xtype==etDYNSTRING ){ | |
| 714 | + zExtra = bufpt; | |
| 715 | + }else if( xtype==etSTRINGID && validate16(bufpt, length) ){ | |
| 716 | + precision = hash_digits(flag_altform2); | |
| 717 | + } | |
| 714 | 718 | } |
| 715 | - length = StrNLen32(bufpt, limit); | |
| 716 | 719 | if( precision>=0 && precision<length ) length = precision; |
| 717 | 720 | break; |
| 718 | 721 | } |
| 719 | 722 | case etBLOB: { |
| 720 | 723 | int limit = flag_alternateform ? va_arg(ap, int) : -1; |
| 721 | 724 |
| --- src/printf.c | |
| +++ src/printf.c | |
| @@ -705,16 +705,19 @@ | |
| 705 | case etDYNSTRING: { |
| 706 | int limit = flag_alternateform ? va_arg(ap,int) : -1; |
| 707 | bufpt = va_arg(ap,char*); |
| 708 | if( bufpt==0 ){ |
| 709 | bufpt = ""; |
| 710 | }else if( xtype==etDYNSTRING ){ |
| 711 | zExtra = bufpt; |
| 712 | }else if( xtype==etSTRINGID && validate16(bufpt, -1) ){ |
| 713 | precision = hash_digits(flag_altform2); |
| 714 | } |
| 715 | length = StrNLen32(bufpt, limit); |
| 716 | if( precision>=0 && precision<length ) length = precision; |
| 717 | break; |
| 718 | } |
| 719 | case etBLOB: { |
| 720 | int limit = flag_alternateform ? va_arg(ap, int) : -1; |
| 721 |
| --- src/printf.c | |
| +++ src/printf.c | |
| @@ -705,16 +705,19 @@ | |
| 705 | case etDYNSTRING: { |
| 706 | int limit = flag_alternateform ? va_arg(ap,int) : -1; |
| 707 | bufpt = va_arg(ap,char*); |
| 708 | if( bufpt==0 ){ |
| 709 | bufpt = ""; |
| 710 | length = 0; |
| 711 | }else{ |
| 712 | length = StrNLen32(bufpt, limit); |
| 713 | if( xtype==etDYNSTRING ){ |
| 714 | zExtra = bufpt; |
| 715 | }else if( xtype==etSTRINGID && validate16(bufpt, length) ){ |
| 716 | precision = hash_digits(flag_altform2); |
| 717 | } |
| 718 | } |
| 719 | if( precision>=0 && precision<length ) length = precision; |
| 720 | break; |
| 721 | } |
| 722 | case etBLOB: { |
| 723 | int limit = flag_alternateform ? va_arg(ap, int) : -1; |
| 724 |