Rename VAL_XMLUPDATE to XML_XMLES bacuase this is an XML extended
[yaz-moved-to-github.git] / src / ber_oid.c
index 6a738e1..e1947d6 100644 (file)
@@ -1,8 +1,16 @@
 /*
- * Copyright (c) 1995-2004, Index Data
+ * Copyright (C) 1995-2005, Index Data ApS
  * See the file LICENSE for details.
  *
- * $Id: ber_oid.c,v 1.2 2004-02-11 23:49:28 adam Exp $
+ * $Id: ber_oid.c,v 1.6 2005-05-26 21:46:40 adam Exp $
+ */
+
+/** 
+ * \file ber_oid.c
+ * \brief Implements BER OID encoding and decoding
+ *
+ * This source file implements BER encoding and decoding of
+ * the OID type.
  */
 #if HAVE_CONFIG_H
 #include <config.h>
@@ -10,7 +18,7 @@
 
 #include "odr-priv.h"
 
-int ber_oidc(ODR o, Odr_oid *p)
+int ber_oidc(ODR o, Odr_oid *p, int max_oid_size)
 {
     int len, lenp, end;
     int pos, n, res, id;
@@ -24,7 +32,7 @@ int ber_oidc(ODR o, Odr_oid *p)
             odr_seterror(o, OPROTO, 18);
             return 0;
         }
-        if (len <= 0)
+        if (len < 0)
         {
             odr_seterror(o, OPROTO, 19);
             return 0;
@@ -61,6 +69,11 @@ int ber_oidc(ODR o, Odr_oid *p)
                p[1] = id - p[0] * 40;
                pos = 2;
             }
+           if (pos >= max_oid_size)
+           {
+               odr_seterror(o, OPROTO, 55);
+               return 0;
+           }
        }
         p[pos] = -1;
         return 1;
@@ -70,7 +83,7 @@ int ber_oidc(ODR o, Odr_oid *p)
         lenp = odr_tell(o);
         if (odr_putc(o, 0) < 0)   /* dummy */
             return 0;
-        if (p[0] < 0 || p[1] <= 0)
+        if (p[0] < 0 || p[1] < 0)
         {
             odr_seterror(o, ODATA, 23);
             return 0;