]> Git Repo - VerusCoin.git/commitdiff
Support 'd' and 'D' format types
authorjl777 <[email protected]>
Thu, 6 Sep 2018 06:57:26 +0000 (19:57 -1100)
committerjl777 <[email protected]>
Thu, 6 Sep 2018 06:57:26 +0000 (19:57 -1100)
src/cc/CCinclude.h
src/cc/oracles.cpp

index 1e2bcd4e0850b9c984fe00dd86819c62e1b8647f..d693a547ccd87d846346cb2fa25a6d7be67e992a 100644 (file)
@@ -47,6 +47,7 @@ one other technical note is that komodod has the insight-explorer extensions bui
 #include "../wallet/wallet.h"
 #include <univalue.h>
 #include <exception>
+#include "../komodo_globals.h"
 
 extern int32_t KOMODO_CONNECTING,KOMODO_CCACTIVATE;
 extern uint32_t ASSETCHAINS_CC;
index bfa5f1e88789b4d91ff80a23276fe8188e500be9..fce668dd64cbbc6d9f455e221744340ecd31fad9 100644 (file)
@@ -281,13 +281,17 @@ uint256 OracleBatonUtxo(uint64_t txfee,struct CCcontract_info *cp,uint256 refora
 
 int32_t oracle_format(uint256 *hashp,int64_t *valp,char *str,uint8_t fmt,uint8_t *data,int32_t offset,int32_t datalen)
 {
-    char _str[65]; int32_t sflag = 0,i,val32,len = 0,slen = 0; uint32_t uval32; uint16_t uval16; int16_t val16; int64_t val = 0; uint64_t uval = 0;
+    char _str[65]; int32_t sflag = 0,i,val32,len = 0,slen = 0,dlen = 0; uint32_t uval32; uint16_t uval16; int16_t val16; int64_t val = 0; uint64_t uval = 0;
     *valp = 0;
     *hashp = zeroid;
+    if ( str != 0 )
+        str[0] = 0;
     switch ( fmt )
     {
         case 's': slen = data[offset++]; break;
         case 'S': slen = data[offset++]; slen |= ((int32_t)data[offset++] << 8); break;
+        case 'd': dlen = data[offset++]; break;
+        case 'D': dlen = data[offset++]; dlen |= ((int32_t)data[offset++] << 8); break;
         case 'c': len = 1; sflag = 1; break;
         case 'C': len = 1; break;
         case 't': len = 2; sflag = 1; break;
@@ -303,16 +307,24 @@ int32_t oracle_format(uint256 *hashp,int64_t *valp,char *str,uint8_t fmt,uint8_t
     {
         if ( str != 0 )
         {
-            for (i=0; i<slen; i++)
+            if ( slen < IGUANA_MAXSCRIPTSIZE && offset+slen <= datalen )
             {
-                str[i] = data[offset++];
-                if ( offset >= datalen )
-                {
-                    str[i] = 0;
-                    return(-1);
-                }
-            }
-            str[i] = 0;
+                for (i=0; i<slen; i++)
+                    str[i] = data[offset++];
+                str[i] = 0;
+            } else return(-1);
+        }
+    }
+    else if ( dlen != 0 )
+    {
+        if ( str != 0 )
+        {
+            if ( dlen < IGUANA_MAXSCRIPTSIZE && offset+dlen <= datalen )
+            {
+                for (i=0; i<dlen; i++)
+                    sprintf(&str[i<<1],"%02x",data[offset++]);
+                str[i] = 0;
+            } else return(-1);
         }
     }
     else if ( len != 0 && len+offset <= datalen )
@@ -736,7 +748,7 @@ std::string OracleData(int64_t txfee,uint256 oracletxid,std::vector <uint8_t> da
 
 UniValue OracleFormat(uint8_t *data,int32_t datalen,char *format,int32_t formatlen)
 {
-    UniValue obj(UniValue::VARR); uint256 hash; int32_t i,j=0; int64_t val; char str[16384];
+    UniValue obj(UniValue::VARR); uint256 hash; int32_t i,j=0; int64_t val; char str[IGUANA_MAXSCRIPTSIZE*2+1];
     for (i=0; i<formatlen && j<datalen; i++)
     {
         str[0] = 0;
This page took 0.024869 seconds and 4 git commands to generate.