PennMUSH Incorporation. 182p2
authorRick Bird <nveid@bender.theari.com>
Fri, 25 Mar 2011 18:13:27 +0000 (14:13 -0400)
committerRick Bird <nveid@bender.theari.com>
Fri, 25 Mar 2011 18:13:27 +0000 (14:13 -0400)
  - math function crashes fix

src/funmath.c
src/funstr.c
src/utils.c

index a37167eb017715e0af2297648a1dd0a7c98e785b..009f1357bd95778e4c0bcbc841cabf571360ce90 100644 (file)
@@ -459,8 +459,10 @@ FUNCTION(fun_vmax)
   NVAL a, b;
 
   /* return if a list is empty */
-  if (!args[0] || !args[1])
+  if (!args[0] || !args[1]) {
+    safe_str(T("#-1 VECTORS MUST BE SAME DIMENSIONS"), buff, bp);
     return;
+  }
 
   if (!delim_check(buff, bp, nargs, args, 3, &sep))
     return;
@@ -468,8 +470,10 @@ FUNCTION(fun_vmax)
   p2 = trim_space_sep(args[1], sep);
 
   /* return if a list is empty */
-  if (!*p1 || !*p2)
+  if (!*p1 || !*p2) {
+    safe_str(T("#-1 VECTORS MUST BE SAME DIMENSIONS"), buff, bp);
     return;
+  }
 
   /* max the vectors */
   start = *bp;
@@ -501,8 +505,10 @@ FUNCTION(fun_vmin)
   NVAL a, b;
 
   /* return if a list is empty */
-  if (!args[0] || !args[1])
+  if (!args[0] || !args[1]) {
+    safe_str(T("#-1 VECTORS MUST BE SAME DIMENSIONS"), buff, bp);
     return;
+  }
 
   if (!delim_check(buff, bp, nargs, args, 3, &sep))
     return;
@@ -543,8 +549,10 @@ FUNCTION(fun_vadd)
   char sep;
 
   /* return if a list is empty */
-  if (!args[0] || !args[1])
+  if (!args[0] || !args[1]) {
+    safe_str(T("#-1 VECTORS MUST BE SAME DIMENSIONS"), buff, bp);
     return;
+  }
 
   if (!delim_check(buff, bp, nargs, args, 3, &sep))
     return;
@@ -552,8 +560,10 @@ FUNCTION(fun_vadd)
   p2 = trim_space_sep(args[1], sep);
 
   /* return if a list is empty */
-  if (!*p1 || !*p2)
+  if (!*p1 || !*p2) {
+    safe_str(T("#-1 VECTORS MUST BE SAME DIMENSIONS"), buff, bp);
     return;
+  }
 
   /* add the vectors */
   start = *bp;
@@ -582,8 +592,10 @@ FUNCTION(fun_vsub)
   char sep;
 
   /* return if a list is empty */
-  if (!args[0] || !args[1])
+  if (!args[0] || !args[1]) {
+    safe_str(T("#-1 VECTORS MUST BE SAME DIMENSIONS"), buff, bp);
     return;
+  }
 
   if (!delim_check(buff, bp, nargs, args, 3, &sep))
     return;
@@ -591,8 +603,10 @@ FUNCTION(fun_vsub)
   p2 = trim_space_sep(args[1], sep);
 
   /* return if a list is empty */
-  if (!*p1 || !*p2)
+  if (!*p1 || !*p2) {
+    safe_str(T("#-1 VECTORS MUST BE SAME DIMENSIONS"), buff, bp);
     return;
+  }
 
   /* subtract the vectors */
   start = *bp;
@@ -621,8 +635,10 @@ FUNCTION(fun_vmul)
   char sep;
 
   /* return if a list is empty */
-  if (!args[0] || !args[1])
+  if (!args[0] || !args[1]) {
+    safe_str(T("#-1 VECTORS MUST BE SAME DIMENSIONS"), buff, bp);
     return;
+  }
 
   if (!delim_check(buff, bp, nargs, args, 3, &sep))
     return;
@@ -630,8 +646,10 @@ FUNCTION(fun_vmul)
   p2 = trim_space_sep(args[1], sep);
 
   /* return if a list is empty */
-  if (!*p1 || !*p2)
+  if (!*p1 || !*p2) {
+    safe_str(T("#-1 VECTORS MUST BE SAME DIMENSIONS"), buff, bp);
     return;
+  }
 
   /* multiply the vectors */
   start = *bp;
@@ -678,8 +696,10 @@ FUNCTION(fun_vdot)
   char sep;
 
   /* return if a list is empty */
-  if (!args[0] || !args[1])
+  if (!args[0] || !args[1]) {
+    safe_str(T("#-1 VECTORS MUST BE SAME DIMENSIONS"), buff, bp);
     return;
+  }
 
   if (!delim_check(buff, bp, nargs, args, 3, &sep))
     return;
@@ -687,8 +707,10 @@ FUNCTION(fun_vdot)
   p2 = trim_space_sep(args[1], sep);
 
   /* return if a list is empty */
-  if (!*p1 || !*p2)
+  if (!*p1 || !*p2) {
+    safe_str(T("#-1 VECTORS MUST BE SAME DIMENSIONS"), buff, bp);
     return;
+  }
 
   /* multiply the vectors */
   product = 0;
@@ -711,16 +733,20 @@ FUNCTION(fun_vmag)
   char sep;
 
   /* return if a list is empty */
-  if (!args[0])
+  if (!args[0]) {
+    safe_str(T("#-1 VECTOR MUST NOT BE EMPTY"), buff, bp);
     return;
+  }
 
   if (!delim_check(buff, bp, nargs, args, 2, &sep))
     return;
   p1 = trim_space_sep(args[0], sep);
 
   /* return if a list is empty */
-  if (!*p1)
+  if (!*p1) {
+    safe_str(T("#-1 VECTOR MUST NOT BE EMPTY"), buff, bp);
     return;
+  }
 
   /* sum the squares */
   num = parse_number(split_token(&p1, sep));
@@ -742,16 +768,20 @@ FUNCTION(fun_vunit)
   char sep;
 
   /* return if a list is empty */
-  if (!args[0])
+  if (!args[0]) {
+    safe_str(T("#-1 VECTOR MUST NOT BE EMPTY"), buff, bp);
     return;
+  }
 
   if (!delim_check(buff, bp, nargs, args, 2, &sep))
     return;
   p1 = trim_space_sep(args[0], sep);
 
   /* return if a list is empty */
-  if (!*p1)
+  if (!*p1) {
+    safe_str(T("#-1 VECTOR MUST NOT BE EMPTY"), buff, bp);
     return;
+  }
 
   /* copy the vector, since we have to walk it twice... */
   strcpy(tbuf, p1);
@@ -1679,7 +1709,7 @@ FUNCTION(fun_lmath)
   MATH *op;
 
   /* Allocate memory */
-  ptr = (char **) mush_malloc(BUFFER_LEN, "string");
+  ptr = (char **) mush_malloc(sizeof(char *) * BUFFER_LEN, "string");
 
   if (!delim_check(buff, bp, nargs, args, 3, &sep)) {
     mush_free((Malloc_t) ptr, "string");
index 5fe9cfe42385a69ddd0c3c67e6f4d8a5084eeba9..52b05b02d3e43979465fca9d8b32517554ac61da 100644 (file)
@@ -1363,16 +1363,18 @@ init_tag_hashtab(void)
 FUNCTION(fun_ord)
 {
   char *m;
+  unsigned char what;
   size_t len = 0;
   if (!args[0] || !args[0][0]) {
     safe_str(T("#-1 FUNCTION EXPECTS ONE CHARACTER"), buff, bp);
     return;
   }
   m = remove_markup(args[0], &len);
+  what = (unsigned char) *m;
 
   if (len != 2)                        /* len includes trailing nul */
-    safe_str(T("#-1 FUNCTION EXPECTS ONE CHARACTER"), buff, bp);
-  else if (isprint((unsigned char) *m))
+    safe_str(T("#-1 FUNCTION (ORD) EXPECTS ONE CHARACTER"), buff, bp);
+  else if(isprint(what) || what == '\n')
     safe_integer((unsigned char) *m, buff, bp);
   else
     safe_str(T("#-1 UNPRINTABLE CHARACTER"), buff, bp);
index 462e9034225eed0c9e8c98040f4492f1ff583de4..ac8a068ed96534039f44bbc50eb491171736308d 100644 (file)
@@ -49,7 +49,6 @@
 dbref find_entrance(dbref door);
 void initialize_mt(void);
 static unsigned long genrand_int32(void);
-static long genrand_int31(void);
 static void init_genrand(unsigned long);
 static void init_by_array(unsigned long *, int);
 extern int local_can_interact_first(dbref from, dbref to, int type);
@@ -628,12 +627,6 @@ genrand_int32(void)
   return y;
 }
 
-/* generates a random number on [0,0x7fffffff]-interval */
-static long
-genrand_int31(void)
-{
-  return (long) (genrand_int32() >> 1);
-}
 
 /** Get a uniform random long between low and high values, inclusive.
  * Based on MUX's RandomINT32()
@@ -679,7 +672,7 @@ get_random_long(long low, long high)
   n_limit = ULONG_MAX - (ULONG_MAX % x);
 
   do {
-    n = genrand_int31();
+    n = genrand_int32();
   } while (n >= n_limit);
 
   return low + (n % x);