bug 4789
Allan CORNET [Thu, 17 Sep 2009 12:24:38 +0000 (14:24 +0200)]
scilab/CHANGES_5.2.X
scilab/modules/dynamic_link/macros/G_make.sci
scilab/modules/dynamic_link/macros/gencompilationflags_unix.sci
scilab/modules/dynamic_link/macros/ilib_build.sci
scilab/modules/dynamic_link/macros/ilib_compile.sci
scilab/modules/dynamic_link/macros/ilib_for_link.sci
scilab/modules/dynamic_link/macros/ilib_gen_Make.sci
scilab/modules/dynamic_link/macros/ilib_gen_gateway.sci
scilab/modules/dynamic_link/macros/ilib_mex_build.sci
scilab/modules/dynamic_link/tests/nonreg_tests/bug_4789.dia.ref [new file with mode: 0644]
scilab/modules/dynamic_link/tests/nonreg_tests/bug_4789.tst [new file with mode: 0644]

index efe3400..ba31f8c 100644 (file)
@@ -430,4 +430,6 @@ Bug fixes:
 
 * bug 4744 fixed - whereis, librairieslist, libraryinfo primitives should be moved in "functions" modules.
 
+* bug 4789 fixed - number of input arguments is not checked in ilib_functions (dynamic_link module)
+
 * bug 4795 fixed - CallScilab.h renamed call_scilab.h
index 11a1f94..2186ba5 100644 (file)
@@ -14,6 +14,12 @@ function [res]=G_make(files,objects_or_dll)
   if ~haveacompiler() then
     error(msprintf(gettext('%s: A Fortran or C compiler is required.\n'),'G_make'))
   end
+  
+  [lhs,rhs] = argn(0);
+  if rhs <> 2 then
+    error(msprintf(gettext("%s: Wrong number of input argument(s).\n"),"G_make"));
+    return
+  end
 
   msg = '';
   
index f1da9cc..f4db23a 100644 (file)
@@ -9,11 +9,17 @@
 
 
 function cmd = gencompilationflags_unix(ldflags, cflags, fflags, cc)
-                                       // This function is restricted to Linux/Unix user only
+  // This function is restricted to Linux/Unix user only
        if MSDOS then
          error(msprintf(gettext("%s: Feature not available under Microsoft Windows.\n"),'gencompilationflags_unix'));
          return;
        end
+       
+  [lhs,rhs] = argn(0);
+  if rhs <> 4 then
+    error(msprintf(gettext("%s: Wrong number of input argument(s).\n"),"gencompilationflags_unix"));
+    return
+  end
 
        cmd=''
        // CFLAGS
index 6afb2ec..01fdc80 100644 (file)
@@ -1,6 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) ENPC/INRIA
-// Copyright (C) DIGITEO - 2009 - Allan CORNEt
+// Copyright (C) DIGITEO - 2009 - Allan CORNET
 // 
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
@@ -12,11 +12,15 @@ function ilib_build(ilib_name,table,files,libs,makename,ldflags,cflags,fflags,is
 
   if ~haveacompiler() then
     error(msprintf(gettext("%s: A Fortran or C compiler is required.\n"),'ilib_build'));
-       return;
+    return;
   end
   
   [lhs,rhs] = argn(0);
-  
+  if rhs < 4 then
+    error(msprintf(gettext("%s: Wrong number of input argument(s).\n"),"ilib_build"));
+    return
+  end
+
   if type(ilib_name) <> 10 then
     error(999,msprintf(_("%s: Wrong type for input argument #%d: A string expected.\n"),'ilib_build',1));
   end
index 599e5bc..c815655 100644 (file)
@@ -15,6 +15,12 @@ function libn = ilib_compile(lib_name,makename,files, ..
                                                         cc)
 
 
+  [lhs,rhs] = argn(0);
+  if rhs < 3 then
+    error(msprintf(gettext("%s: Wrong number of input argument(s).\n"),"ilib_compile"));
+    return
+  end
+  
   libn=""; //** init variable 
 
   if ~haveacompiler() then
index 76c7abc..566c021 100644 (file)
@@ -22,6 +22,10 @@ function libn = ilib_for_link(names, ..
                               cc)
 
   [lhs,rhs] = argn(0);
+  if rhs < 4 then
+    error(msprintf(gettext("%s: Wrong number of input argument(s).\n"),"ilib_for_link"));
+    return
+  end
   
   if rhs <= 4 then makename = "Makelib";end
   if rhs <= 5 then loadername = "loader.sce";end
index 498c833..96504a8 100644 (file)
@@ -12,6 +12,12 @@ function Makename=ilib_gen_Make(name,tables,files,libs,makename,with_gateway,ldf
 //------------------------------------
 // generate a Makefile for gateway
 
+  [lhs,rhs] = argn(0);
+  if rhs < 4 then
+    error(msprintf(gettext("%s: Wrong number of input argument(s).\n"), "ilib_gen_Make"));
+    return
+  end
+
   if argn(2)<6 then with_gateway=%t,ldflags='',cflags='',fflags='', cc='';end
   for i=1:size(files,'*') // compatibility scilab 4.x
     [path_f, file_f, ext_f] = fileparts(files(i));
index 6c6a336..a3113e0 100644 (file)
 
 function gateway_filename = ilib_gen_gateway(name,tables)
 
+  [lhs,rhs] = argn(0);
+  if rhs <> 2 then
+    error(msprintf(gettext("%s: Wrong number of input argument(s).\n"), "ilib_gen_gateway"));
+    return
+  end
+
   gateway_filename = '';
   k = strindex(name,['/','\']);
   if k~=[] then
index 392ecac..5370b22 100644 (file)
@@ -16,7 +16,11 @@ function ilib_mex_build(ilib_name,table,files,libs,makename,ldflags,cflags,fflag
        return;
   end
   
-  [lhs,rhs]=argn(0);
+  [lhs,rhs] = argn(0);
+  if rhs < 4 then
+    error(msprintf(gettext("%s: Wrong number of input argument(s).\n"),"ilib_mex_build"));
+    return
+  end
   
   if rhs <= 4 then makename = 'Makelib';end
   if rhs <= 5 then ldflags = ''; end 
diff --git a/scilab/modules/dynamic_link/tests/nonreg_tests/bug_4789.dia.ref b/scilab/modules/dynamic_link/tests/nonreg_tests/bug_4789.dia.ref
new file mode 100644 (file)
index 0000000..df68568
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - DIGITEO - Allan CORNET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- JVM NOT MANDATORY -->
+// <-- Non-regression test for bug 4789 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=4789
+//
+// <-- Short Description -->
+// number of input arguments is not checked in ilib_xxx functions
+ierr = execstr("l=ilib_for_link(''rosenf'',[''adStack.c'',''adBuffer.f'',''rosenf_b.f'']);","errcatch");
+if ierr <> 10000 then bugmes();quit;end
+ierr = execstr("ilib_mex_build();","errcatch");
+if ierr <> 10000 then bugmes();quit;end
+ierr = execstr("ilib_gen_Make();","errcatch");
+if ierr <> 10000 then bugmes();quit;end
+ierr = execstr("ilib_gen_gateway();","errcatch");
+if ierr <> 10000 then bugmes();quit;end
+ierr = execstr("ilib_compile();","errcatch");
+if ierr <> 10000 then bugmes();quit;end
+ierr = execstr("ilib_build();","errcatch");
+if ierr <> 10000 then bugmes();quit;end
+ierr = execstr("G_make();","errcatch");
+if ierr <> 10000 then bugmes();quit;end
+ierr = execstr("gencompilationflags_unix();","errcatch");
+if ierr <> 10000 then bugmes();quit;end
diff --git a/scilab/modules/dynamic_link/tests/nonreg_tests/bug_4789.tst b/scilab/modules/dynamic_link/tests/nonreg_tests/bug_4789.tst
new file mode 100644 (file)
index 0000000..1b47104
--- /dev/null
@@ -0,0 +1,41 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - DIGITEO - Allan CORNET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- JVM NOT MANDATORY -->
+
+// <-- Non-regression test for bug 4789 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=4789
+//
+// <-- Short Description -->
+// number of input arguments is not checked in ilib_xxx functions
+
+ierr = execstr("l=ilib_for_link(''rosenf'',[''adStack.c'',''adBuffer.f'',''rosenf_b.f'']);","errcatch");
+if ierr <> 10000 then pause,end
+
+ierr = execstr("ilib_mex_build();","errcatch");
+if ierr <> 10000 then pause,end
+
+ierr = execstr("ilib_gen_Make();","errcatch");
+if ierr <> 10000 then pause,end
+
+ierr = execstr("ilib_gen_gateway();","errcatch");
+if ierr <> 10000 then pause,end
+
+ierr = execstr("ilib_compile();","errcatch");
+if ierr <> 10000 then pause,end
+
+ierr = execstr("ilib_build();","errcatch");
+if ierr <> 10000 then pause,end
+
+ierr = execstr("G_make();","errcatch");
+if ierr <> 10000 then pause,end
+
+ierr = execstr("gencompilationflags_unix();","errcatch");
+if ierr <> 10000 then pause,end
+