Mercurial > hg > nginx-quic
comparison src/core/ngx_string.c @ 6974:289403abc84e
Core: improved JSON escaping.
Two-character representations are now used for \b, \f, \n, \r, and \t.
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Wed, 12 Apr 2017 22:47:57 +0300 |
parents | b3682580c1bd |
children | e3723f2a11b7 |
comparison
equal
deleted
inserted
replaced
6973:99934aade555 | 6974:289403abc84e |
---|---|
1806 | 1806 |
1807 if (ch == '\\' || ch == '"') { | 1807 if (ch == '\\' || ch == '"') { |
1808 len++; | 1808 len++; |
1809 | 1809 |
1810 } else if (ch <= 0x1f) { | 1810 } else if (ch <= 0x1f) { |
1811 len += sizeof("\\u001F") - 2; | 1811 |
1812 switch (ch) { | |
1813 case '\n': | |
1814 case '\r': | |
1815 case '\t': | |
1816 case '\b': | |
1817 case '\f': | |
1818 len++; | |
1819 break; | |
1820 | |
1821 default: | |
1822 len += sizeof("\\u001F") - 2; | |
1823 } | |
1812 } | 1824 } |
1813 | 1825 |
1814 size--; | 1826 size--; |
1815 } | 1827 } |
1816 | 1828 |
1827 } | 1839 } |
1828 | 1840 |
1829 *dst++ = ch; | 1841 *dst++ = ch; |
1830 | 1842 |
1831 } else { | 1843 } else { |
1832 *dst++ = '\\'; *dst++ = 'u'; *dst++ = '0'; *dst++ = '0'; | 1844 *dst++ = '\\'; |
1833 *dst++ = '0' + (ch >> 4); | 1845 |
1834 | 1846 switch (ch) { |
1835 ch &= 0xf; | 1847 case '\n': |
1836 | 1848 *dst++ = 'n'; |
1837 *dst++ = (ch < 10) ? ('0' + ch) : ('A' + ch - 10); | 1849 break; |
1850 | |
1851 case '\r': | |
1852 *dst++ = 'r'; | |
1853 break; | |
1854 | |
1855 case '\t': | |
1856 *dst++ = 't'; | |
1857 break; | |
1858 | |
1859 case '\b': | |
1860 *dst++ = 'b'; | |
1861 break; | |
1862 | |
1863 case '\f': | |
1864 *dst++ = 'f'; | |
1865 break; | |
1866 | |
1867 default: | |
1868 *dst++ = 'u'; *dst++ = '0'; *dst++ = '0'; | |
1869 *dst++ = '0' + (ch >> 4); | |
1870 | |
1871 ch &= 0xf; | |
1872 | |
1873 *dst++ = (ch < 10) ? ('0' + ch) : ('A' + ch - 10); | |
1874 } | |
1838 } | 1875 } |
1839 | 1876 |
1840 size--; | 1877 size--; |
1841 } | 1878 } |
1842 | 1879 |