diff --git a/source/dub/internal/utils.d b/source/dub/internal/utils.d index 65273a5..759466c 100644 --- a/source/dub/internal/utils.d +++ b/source/dub/internal/utils.d @@ -59,7 +59,7 @@ auto f = openFile(file.toNativeString(), FileMode.Read); scope(exit) f.close(); auto text = stripUTF8Bom(cast(string)f.readAll()); - return parseJson(text); + return parseJsonString(text); } Json jsonFromZip(Path zip, string filename) { @@ -69,7 +69,7 @@ f.close(); auto archive = new ZipArchive(b); auto text = stripUTF8Bom(cast(string)archive.expand(archive.directory[filename])); - return parseJson(text); + return parseJsonString(text); } void writeJsonFile(Path path, Json json) diff --git a/source/dub/internal/vibecompat/data/json.d b/source/dub/internal/vibecompat/data/json.d index 37f2012..d6832f5 100644 --- a/source/dub/internal/vibecompat/data/json.d +++ b/source/dub/internal/vibecompat/data/json.d @@ -14,6 +14,8 @@ import std.range; import std.traits; +version = JsonLineNumbers; + /******************************************************************************/ /* public types */ @@ -728,9 +730,9 @@ skipWhitespace(range, line); version(JsonLineNumbers){ - import vibecompat.core.log; + import dub.internal.vibecompat.core.log; int curline = line ? *line : 0; - scope(failure) logError("Error in line: %d", curline); + scope(failure) logError("Error at line: %d", line ? *line : 0); } switch( range.front ){ @@ -813,8 +815,9 @@ */ Json parseJsonString(string str) { - auto ret = parseJson(str); - enforce(str.strip().length == 0, "Expected end of string after JSON value."); + int line = 0; + auto ret = parseJson(str, &line); + enforce(str.strip().length == 0, "Expected end of string after JSON value, not '"~str.strip()~"'."); return ret; } @@ -1247,7 +1250,8 @@ private string skipJsonString(ref string s, int* line = null) { - enforce(s.length >= 2 && s[0] == '\"', "too small: '" ~ s ~ "'"); + enforce(s.length >= 2, "Too small for a string: '" ~ s ~ "'"); + enforce(s[0] == '\"', "Expected string, not '" ~ s ~ "'"); s = s[1 .. $]; string ret = jsonUnescape(s); enforce(s.length > 0 && s[0] == '\"', "Unterminated string literal."); diff --git a/source/dub/packagesupplier.d b/source/dub/packagesupplier.d index 282ba03..b51d497 100644 --- a/source/dub/packagesupplier.d +++ b/source/dub/packagesupplier.d @@ -153,7 +153,7 @@ logDebug("Getting from %s", url); auto jsonData = cast(string)download(url); - Json json = parseJson(jsonData); + Json json = parseJsonString(jsonData); m_metadataCache[packageId] = CacheEntry(json, now); return json; }