From 48bb3e0096b3cdf6182be0d86ee182b81ac7347d Mon Sep 17 00:00:00 2001 From: Steve Fink Date: Tue, 29 Sep 2015 16:39:45 -0700 Subject: [PATCH] Bug 1197941 - Allow getline() to malloc its own buffer to avoid intermittent crashes, r=shu --HG-- extra : commitid : 1uyyLvURamj extra : rebase_source : 3bf604d75b79c81d75931701c50f9d4088e7d568 --- js/src/devtools/rootAnalysis/utility.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/js/src/devtools/rootAnalysis/utility.js b/js/src/devtools/rootAnalysis/utility.js index 32347edb3f3b..fecf1adaa8e6 100644 --- a/js/src/devtools/rootAnalysis/utility.js +++ b/js/src/devtools/rootAnalysis/utility.js @@ -158,21 +158,21 @@ function cLibrary() fopen: lib.declare("fopen", ctypes.default_abi, ctypes.void_t.ptr, ctypes.char.ptr, ctypes.char.ptr), getline: lib.declare("getline", ctypes.default_abi, ctypes.ssize_t, ctypes.char.ptr.ptr, ctypes.size_t.ptr, ctypes.void_t.ptr), fclose: lib.declare("fopen", ctypes.default_abi, ctypes.int, ctypes.void_t.ptr), - setvbuf: lib.declare("setvbuf", ctypes.default_abi, ctypes.int, ctypes.void_t.ptr, ctypes.char.ptr, ctypes.int, ctypes.size_t), + free: lib.declare("free", ctypes.default_abi, ctypes.void_t.ptr), }; } function* readFileLines_gen(filename) { - var libc = cLibrary(); - var linebuf = ctypes.char.array(4096)(); - var bufsize = ctypes.size_t(4096); - var fp = libc.fopen(filename, "r"); - if (fp.isNull()) - throw "Unable to open '" + filename + "'" + var libc = cLibrary(); + var linebuf = ctypes.char.ptr(); + var bufsize = ctypes.size_t(0); + var fp = libc.fopen(filename, "r"); + if (fp.isNull()) + throw "Unable to open '" + filename + "'" - var bufp = ctypes.char.ptr(linebuf.addressOfElement(0)); - while (libc.getline(bufp.address(), bufsize.address(), fp) > 0) - yield bufp.readString(); - libc.fclose(fp); + while (libc.getline(linebuf.address(), bufsize.address(), fp) > 0) + yield linebuf.readString(); + libc.fclose(fp); + libc.free(ctypes.void_t.ptr(linebuf)); }