From ebc900f4bb9904a43fbddd5a20a43cc9cfefcbc7 Mon Sep 17 00:00:00 2001 From: anders_k Date: Fri, 26 Feb 2016 16:16:29 +0000 Subject: [PATCH] Warn when the [License]LangString language id parameter is not a valid number git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6711 212acab6-be3b-0410-9dea-997c60f758d6 --- Source/build.h | 1 + Source/script.cpp | 21 +++++++++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Source/build.h b/Source/build.h index 19f3b25f..7d260f69 100644 --- a/Source/build.h +++ b/Source/build.h @@ -207,6 +207,7 @@ class CEXEBuild { int includeScript(const TCHAR *f, NStreamEncoding&enc); TCHAR* GetMacro(const TCHAR *macroname, TCHAR**macroend = 0); bool MacroExists(const TCHAR *macroname) { return !!GetMacro(macroname); } + LANGID ParseLangIdParameter(const LineParser&line, int token); int LoadLicenseFile(const TCHAR *file, TCHAR** pdata, const TCHAR *cmdname, WORD AnsiCP); #ifdef NSIS_FIX_DEFINES_IN_STRINGS void ps_addtoline(const TCHAR *str, GrowBuf &linedata, StringList &hist, bool bIgnoreDefines = false); diff --git a/Source/script.cpp b/Source/script.cpp index 0dc5e61f..d539231b 100644 --- a/Source/script.cpp +++ b/Source/script.cpp @@ -1781,7 +1781,7 @@ int CEXEBuild::doCommand(int which_token, LineParser &line) case TOK_LANGSTRING: { TCHAR *name = line.gettoken_str(1); - LANGID lang = line.gettoken_int(2); + LANGID lang = ParseLangIdParameter(line, 2); TCHAR *str = line.gettoken_str(3); const int ret = SetLangString(name, lang, str); if (ret == PS_WARNING) @@ -1806,17 +1806,15 @@ int CEXEBuild::doCommand(int which_token, LineParser &line) } #endif TCHAR *name = line.gettoken_str(1); - LANGID lang = line.gettoken_int(2); + LANGID lang = ParseLangIdParameter(line, 2); TCHAR *file = line.gettoken_str(3); TCHAR *data = NULL; MANAGE_WITH(data, free); - WORD AnsiCP = CP_ACP; LanguageTable *pLT = GetLangTable(lang); - if (pLT) AnsiCP = pLT->nlf.m_uCodePage; - - int ret = LoadLicenseFile(file, &data, cmdnam, AnsiCP); + WORD acp = pLT ? pLT->nlf.m_uCodePage : CP_ACP; + int ret = LoadLicenseFile(file, &data, cmdnam, acp); if (ret != PS_OK) return ret; @@ -6655,8 +6653,6 @@ int CEXEBuild::do_add_file_create_dir(const tstring& local_dir, const tstring& d } #endif - - DefineList *CEXEBuild::searchParseString(const TCHAR *source_string, LineParser&line, int parmOffs, bool ignCase, bool noErrors, UINT*failParam) { const bool allowEmptyFirstTok = true; @@ -6698,3 +6694,12 @@ DefineList *CEXEBuild::searchParseString(const TCHAR *source_string, LineParser& } return ret; } + +LANGID CEXEBuild::ParseLangIdParameter(const LineParser&line, int token) +{ + int succ, lid = line.gettoken_int(token, &succ); + if (!lid) lid = last_used_lang; + if (!succ) + warning_fl(_T("\"%") NPRIs _T("\" is not a valid language id, using language id %u!"), line.gettoken_str(token), lid); + return lid; +}