You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/08/21 11:49:30 UTC

svn commit: r806479 - /commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c

Author: mturk
Date: Fri Aug 21 09:49:29 2009
New Revision: 806479

URL: http://svn.apache.org/viewvc?rev=806479&view=rev
Log:
Do not allow dots in semaphore names as well

Modified:
    commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c

Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c?rev=806479&r1=806478&r2=806479&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c Fri Aug 21 09:49:29 2009
@@ -55,7 +55,7 @@
 struct acr_semaphore_t {
     sem_t *sem;
     int    locked;
-    char   name[NAME_MAX];
+    char   name[NAME_MAX + 1];
 };
 
 static int semaphore_cleanup(void *sema, int type, unsigned int flags)
@@ -90,10 +90,10 @@
     else {
         if (*name != '/')
             s->name[0] = '/';
-        strlcat(s->name, name, NAME_MAX - 2);
+        strlcat(s->name, name, NAME_MAX);
     }
     for (p = &s->name[1]; *p; p++) {
-        if (*p == '/')
+        if (*p == '/' || *p == '.')
             *p = '_';
     }
     do {
@@ -150,9 +150,9 @@
         return -1;
     if (*name != '/')
         s->name[0] = '/';
-    strlcat(s->name, name, NAME_MAX - 2);
+    strlcat(s->name, name, NAME_MAX);
     for (p = &s->name[1]; *p; p++) {
-        if (*p == '/')
+        if (*p == '/' || *p == '.')
             *p = '_';
     }
 
@@ -185,14 +185,18 @@
 
 ACR_DECLARE(int) ACR_SemaphoreRemove(JNIEnv *_E, const acr_pchar_t *sname)
 {
-    char name[NAME_MAX] = "";
+    char *p;
+    char  name[NAME_MAX + 1] = "";
     if (!sname) {
         return ACR_EINVAL;
     }
     if (*sname != '/')
         name[0] = '/';
-    strlcat(name, sname, NAME_MAX -2);
-
+    strlcat(name, sname, NAME_MAX);
+    for (p = &name[1]; *p; p++) {
+        if (*p == '/' || *p == '.')
+            *p = '_';
+    }
     return sem_unlink(name);
 }