* Bug #14375 fixed - Calling input function with a argument of 64 characters or more...
[scilab.git] / scilab / modules / console / sci_gateway / cpp / sci_prompt.cpp
index 40cc7a5..a4fef72 100644 (file)
@@ -2,11 +2,14 @@
 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 * Copyright (C) 2011 - DIGITEO - Cedric DELAMARRE
 *
-* This file must be used under the terms of the CeCILL.
-* This source file is licensed as described in the file COPYING, which
-* you should have received as part of this distribution.  The terms
-* are also available at
-* http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ * Copyright (C) 2012 - 2016 - Scilab Enterprises
+ *
+ * This file is hereby licensed under the terms of the GNU GPL v2.0,
+ * pursuant to article 5.3.4 of the CeCILL v.2.1.
+ * This file was originally licensed under the terms of the CeCILL v2.1,
+ * and continues to be available under such terms.
+ * For more information, see the COPYING file which you should have received
+ * along with this program.
 *
 */
 /*--------------------------------------------------------------------------*/
@@ -62,10 +65,20 @@ types::Function::ReturnValue sci_prompt(types::typed_list &in, int _iRetCount, t
 
         if ((in[0]->isString() == false) || !in[0]->getAs<types::String>()->isScalar())
         {
-            Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), "prompt", 1);
+            Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), "prompt", 1);
             return types::Function::Error;
         }
-        SetTemporaryPrompt(wide_string_to_UTF8(in[0]->getAs<types::String>()->get(0)));
+
+        char* pstrPrompt = wide_string_to_UTF8(in[0]->getAs<types::String>()->get(0));
+        if (strlen(pstrPrompt) > PROMPT_SIZE_MAX - 1)
+        {
+            Scierror(999, _("%s: Wrong size for input argument #%d: A Single string of size %d expected.\n"), "prompt", 1, PROMPT_SIZE_MAX - 1);
+            FREE(pstrPrompt);
+            return types::Function::Error;
+        }
+
+        SetTemporaryPrompt(pstrPrompt);
+        FREE(pstrPrompt);
     }
 
     return types::Function::OK;