Fossil SCM
On the /jtext page, terminate the JSON array early if there are insufficient lines of text in the file to complete the request.
Commit
6f5dfd9d800e692f8d23afffd6cb1ecf07b22694160db13df6853b1eee155683
Parent
5f7fcbabf01abf6…
1 file changed
+8
-6
+8
-6
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -1900,10 +1900,11 @@ | ||
| 1900 | 1900 | int rid = 0; |
| 1901 | 1901 | const char *zName = PD("name", ""); |
| 1902 | 1902 | int iFrom = atoi(PD("from","0")); |
| 1903 | 1903 | int iTo = atoi(PD("to","0")); |
| 1904 | 1904 | int ln; |
| 1905 | + int go = 1; | |
| 1905 | 1906 | const char *zSep; |
| 1906 | 1907 | Blob content; |
| 1907 | 1908 | Blob line; |
| 1908 | 1909 | Blob *pOut; |
| 1909 | 1910 | |
| @@ -1922,22 +1923,23 @@ | ||
| 1922 | 1923 | } |
| 1923 | 1924 | content_get(rid, &content); |
| 1924 | 1925 | g.isConst = 1; |
| 1925 | 1926 | cgi_set_content_type("text/json"); |
| 1926 | 1927 | ln = 0; |
| 1927 | - zSep = "[\n"; | |
| 1928 | - while( ln<iFrom ){ | |
| 1929 | - blob_line(&content, &line); | |
| 1928 | + while( go && ln<iFrom ){ | |
| 1929 | + go = blob_line(&content, &line); | |
| 1930 | 1930 | ln++; |
| 1931 | 1931 | } |
| 1932 | 1932 | pOut = cgi_output_blob(); |
| 1933 | - while( ln<=iTo ){ | |
| 1934 | - blob_append(pOut, zSep, 2); | |
| 1933 | + blob_append(pOut, "[\n", 2); | |
| 1934 | + zSep = 0; | |
| 1935 | + while( go && ln<=iTo ){ | |
| 1936 | + if( zSep ) blob_append(pOut, zSep, 2); | |
| 1935 | 1937 | blob_trim(&line); |
| 1936 | 1938 | blob_append_json_literal(pOut, blob_buffer(&line), blob_size(&line)); |
| 1937 | 1939 | zSep = ",\n"; |
| 1938 | - blob_line(&content, &line); | |
| 1940 | + go = blob_line(&content, &line); | |
| 1939 | 1941 | ln++; |
| 1940 | 1942 | } |
| 1941 | 1943 | blob_appendf(pOut,"]\n"); |
| 1942 | 1944 | blob_reset(&content); |
| 1943 | 1945 | } |
| 1944 | 1946 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -1900,10 +1900,11 @@ | |
| 1900 | int rid = 0; |
| 1901 | const char *zName = PD("name", ""); |
| 1902 | int iFrom = atoi(PD("from","0")); |
| 1903 | int iTo = atoi(PD("to","0")); |
| 1904 | int ln; |
| 1905 | const char *zSep; |
| 1906 | Blob content; |
| 1907 | Blob line; |
| 1908 | Blob *pOut; |
| 1909 | |
| @@ -1922,22 +1923,23 @@ | |
| 1922 | } |
| 1923 | content_get(rid, &content); |
| 1924 | g.isConst = 1; |
| 1925 | cgi_set_content_type("text/json"); |
| 1926 | ln = 0; |
| 1927 | zSep = "[\n"; |
| 1928 | while( ln<iFrom ){ |
| 1929 | blob_line(&content, &line); |
| 1930 | ln++; |
| 1931 | } |
| 1932 | pOut = cgi_output_blob(); |
| 1933 | while( ln<=iTo ){ |
| 1934 | blob_append(pOut, zSep, 2); |
| 1935 | blob_trim(&line); |
| 1936 | blob_append_json_literal(pOut, blob_buffer(&line), blob_size(&line)); |
| 1937 | zSep = ",\n"; |
| 1938 | blob_line(&content, &line); |
| 1939 | ln++; |
| 1940 | } |
| 1941 | blob_appendf(pOut,"]\n"); |
| 1942 | blob_reset(&content); |
| 1943 | } |
| 1944 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -1900,10 +1900,11 @@ | |
| 1900 | int rid = 0; |
| 1901 | const char *zName = PD("name", ""); |
| 1902 | int iFrom = atoi(PD("from","0")); |
| 1903 | int iTo = atoi(PD("to","0")); |
| 1904 | int ln; |
| 1905 | int go = 1; |
| 1906 | const char *zSep; |
| 1907 | Blob content; |
| 1908 | Blob line; |
| 1909 | Blob *pOut; |
| 1910 | |
| @@ -1922,22 +1923,23 @@ | |
| 1923 | } |
| 1924 | content_get(rid, &content); |
| 1925 | g.isConst = 1; |
| 1926 | cgi_set_content_type("text/json"); |
| 1927 | ln = 0; |
| 1928 | while( go && ln<iFrom ){ |
| 1929 | go = blob_line(&content, &line); |
| 1930 | ln++; |
| 1931 | } |
| 1932 | pOut = cgi_output_blob(); |
| 1933 | blob_append(pOut, "[\n", 2); |
| 1934 | zSep = 0; |
| 1935 | while( go && ln<=iTo ){ |
| 1936 | if( zSep ) blob_append(pOut, zSep, 2); |
| 1937 | blob_trim(&line); |
| 1938 | blob_append_json_literal(pOut, blob_buffer(&line), blob_size(&line)); |
| 1939 | zSep = ",\n"; |
| 1940 | go = blob_line(&content, &line); |
| 1941 | ln++; |
| 1942 | } |
| 1943 | blob_appendf(pOut,"]\n"); |
| 1944 | blob_reset(&content); |
| 1945 | } |
| 1946 |