From 63811d0b304d6200c6660771ea6ff98a55693de7 Mon Sep 17 00:00:00 2001 From: Jim Blandy Date: Fri, 20 Sep 2013 21:44:46 -0700 Subject: [PATCH] Bug 916845: Use size_t to describe length of source code in SpiderMonkey SourceHook lazy source hook. r=jorendorff --- js/src/jsfriendapi.h | 2 +- js/src/jsscript.cpp | 4 ++-- js/src/jsscript.h | 2 +- js/xpconnect/src/XPCJSRuntime.cpp | 8 ++++++-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h index d2f86285d71..cec59b22596 100644 --- a/js/src/jsfriendapi.h +++ b/js/src/jsfriendapi.h @@ -204,7 +204,7 @@ extern JS_FRIEND_API(bool) JS_DefineFunctionsWithHelp(JSContext *cx, JSObject *obj, const JSFunctionSpecWithHelp *fs); typedef bool (* JS_SourceHook)(JSContext *cx, const char *filename, - jschar **src, uint32_t *length); + jschar **src, size_t *length); extern JS_FRIEND_API(void) JS_SetSourceHook(JSRuntime *rt, JS_SourceHook hook); diff --git a/js/src/jsscript.cpp b/js/src/jsscript.cpp index fffcf0d2f83..a74d609a24f 100644 --- a/js/src/jsscript.cpp +++ b/js/src/jsscript.cpp @@ -998,7 +998,7 @@ JSScript::loadSource(JSContext *cx, ScriptSource *ss, bool *worked) if (!cx->runtime()->sourceHook || !ss->sourceRetrievable()) return true; jschar *src = NULL; - uint32_t length; + size_t length; if (!cx->runtime()->sourceHook(cx, ss->filename(), &src, &length)) return false; if (!src) @@ -1124,7 +1124,7 @@ ScriptSource::setSourceCopy(ExclusiveContext *cx, const jschar *src, uint32_t le } void -ScriptSource::setSource(const jschar *src, uint32_t length) +ScriptSource::setSource(const jschar *src, size_t length) { JS_ASSERT(!hasSourceData()); length_ = length; diff --git a/js/src/jsscript.h b/js/src/jsscript.h index 6c98e468531..c93c14f8e86 100644 --- a/js/src/jsscript.h +++ b/js/src/jsscript.h @@ -341,7 +341,7 @@ class ScriptSource uint32_t length, bool argumentsNotIncluded, SourceCompressionTask *tok); - void setSource(const jschar *src, uint32_t length); + void setSource(const jschar *src, size_t length); bool ready() const { return ready_; } void setSourceRetrievable() { sourceRetrievable_ = true; } bool sourceRetrievable() const { return sourceRetrievable_; } diff --git a/js/xpconnect/src/XPCJSRuntime.cpp b/js/xpconnect/src/XPCJSRuntime.cpp index f6d0575577c..e098bab3576 100644 --- a/js/xpconnect/src/XPCJSRuntime.cpp +++ b/js/xpconnect/src/XPCJSRuntime.cpp @@ -2774,7 +2774,7 @@ PreserveWrapper(JSContext *cx, JSObject *obj) } static nsresult -ReadSourceFromFilename(JSContext *cx, const char *filename, jschar **src, uint32_t *len) +ReadSourceFromFilename(JSContext *cx, const char *filename, jschar **src, size_t *len) { nsresult rv; @@ -2812,6 +2812,10 @@ ReadSourceFromFilename(JSContext *cx, const char *filename, jschar **src, uint32 NS_ENSURE_SUCCESS(rv, rv); if (!rawLen) return NS_ERROR_FAILURE; + + // Technically, this should be SIZE_MAX, but we don't run on machines + // where that would be less than UINT32_MAX, and the latter is already + // well beyond a reasonable limit. if (rawLen > UINT32_MAX) return NS_ERROR_FILE_TOO_BIG; @@ -2849,7 +2853,7 @@ ReadSourceFromFilename(JSContext *cx, const char *filename, jschar **src, uint32 function. See the comment in the XPCJSRuntime constructor. */ static bool -SourceHook(JSContext *cx, const char *filename, jschar **src, uint32_t *length) +SourceHook(JSContext *cx, const char *filename, jschar **src, size_t *length) { *src = NULL; *length = 0;