diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-11-24 14:37:33 +0100 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-11-24 14:37:33 +0100 |
commit | 9c5a0dbdd3a7a1052a58735c654c3cb69dadf140 (patch) | |
tree | fd1c759fd89d9a0b68abc39025dc3fca7e5cb882 | |
parent | 16eda852f5eb7efcccab571fba6090687ba34dee (diff) |
fix snprintf on output size 0
-rw-r--r-- | src/library.js | 4 | ||||
-rwxr-xr-x | tests/runner.py | 13 |
2 files changed, 15 insertions, 2 deletions
diff --git a/src/library.js b/src/library.js index 06661d59..d0a556be 100644 --- a/src/library.js +++ b/src/library.js @@ -3485,11 +3485,11 @@ LibraryManager.library = { // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html var result = __formatString(format, varargs); var limit = (n === undefined) ? result.length - : Math.min(result.length, n - 1); + : Math.min(result.length, Math.max(n - 1, 0)); for (var i = 0; i < limit; i++) { {{{ makeSetValue('s', 'i', 'result[i]', 'i8') }}}; } - {{{ makeSetValue('s', 'i', '0', 'i8') }}}; + if (limit < n) {{{ makeSetValue('s', 'i', '0', 'i8') }}}; return result.length; }, fprintf__deps: ['fwrite', '_formatString'], diff --git a/tests/runner.py b/tests/runner.py index f3289e46..deeb5689 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -4318,6 +4318,19 @@ at function.:blag ''' self.do_run(src, re.sub('(^|\n)\s+', '\\1', expected)) + def test_snprintf0(self): + src = r''' + #include <stdio.h> + int main() { + int size = snprintf(NULL, 0, "%s %d %.2f\n", "me and myself", 25, 1.345); + char buf[size]; + snprintf(buf, size, "%s %d %.2f\n", "me and myself", 25, 1.345); + printf("%d : %s\n", size, buf); + return 0; + } + ''' + self.do_run(src, '22 : me and myself 25 1.34\n') + def test_atoX(self): if self.emcc_args is None: return self.skip('requires ta2') |