Browse Source

reverted makefile.unix wx-config -- version 0.3.6

git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@119 1a98c847-1fd6-4fd8-948a-caf3550aa51b
0.8
s_nakamoto 15 years ago
parent
commit
757f0769d8
  1. 3
      bignum.h
  2. 19
      makefile.unix
  3. 60
      script.cpp
  4. 27
      script.h
  5. 4
      serialize.h
  6. 6
      setup.nsi

3
bignum.h

@ -401,7 +401,8 @@ public:
CBigNum& operator>>=(unsigned int shift) CBigNum& operator>>=(unsigned int shift)
{ {
// Note: BN_rshift segfaults on 64-bit ubuntu 9.10 if 2^shift is greater than the number // Note: BN_rshift segfaults on 64-bit ubuntu 9.10 if 2^shift is greater than the number,
// tested OK on 64-bit ubuntu 10.4
if (!BN_rshift(this, this, shift)) if (!BN_rshift(this, this, shift))
throw bignum_error("CBigNum:operator>>= : BN_rshift failed"); throw bignum_error("CBigNum:operator>>= : BN_rshift failed");
return *this; return *this;

19
makefile.unix

@ -3,12 +3,21 @@
# file license.txt or http://www.opensource.org/licenses/mit-license.php. # file license.txt or http://www.opensource.org/licenses/mit-license.php.
WXLIBS=$(shell wx-config --debug=yes --libs --static) INCLUDEPATHS= \
WXFLAGS=$(shell wx-config --debug=yes --cppflags) -I"/usr/include" \
-I"/usr/local/include/wx-2.9" \
-I"/usr/local/lib/wx/include/gtk2-unicode-debug-static-2.9"
LIBPATHS= \ LIBPATHS= \
-L"/usr/lib" \
-L"/usr/local/lib" -L"/usr/local/lib"
WXLIBS= \
-Wl,-Bstatic \
-l wx_gtk2ud-2.9 \
-Wl,-Bdynamic \
-l gtk-x11-2.0 -l SM
LIBS= \ LIBS= \
-Wl,-Bstatic \ -Wl,-Bstatic \
-l boost_system \ -l boost_system \
@ -22,7 +31,7 @@ LIBS= \
DEFS=-D__WXGTK__ -DNOPCH DEFS=-D__WXGTK__ -DNOPCH
DEBUGFLAGS=-g -D__WXDEBUG__ DEBUGFLAGS=-g -D__WXDEBUG__
CFLAGS=-O2 -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) CFLAGS=-O2 -Wno-invalid-offsetof -Wformat $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS)
HEADERS=headers.h strlcpy.h serialize.h uint256.h util.h key.h bignum.h base58.h \ HEADERS=headers.h strlcpy.h serialize.h uint256.h util.h key.h bignum.h base58.h \
script.h db.h net.h irc.h main.h rpc.h uibase.h ui.h noui.h init.h script.h db.h net.h irc.h main.h rpc.h uibase.h ui.h noui.h init.h
@ -43,10 +52,10 @@ all: bitcoin
headers.h.gch: headers.h $(HEADERS) headers.h.gch: headers.h $(HEADERS)
g++ -c $(CFLAGS) $(WXFLAGS) -DGUI -o $@ $< g++ -c $(CFLAGS) -DGUI -o $@ $<
obj/%.o: %.cpp $(HEADERS) headers.h.gch obj/%.o: %.cpp $(HEADERS) headers.h.gch
g++ -c $(CFLAGS) $(WXFLAGS) -DGUI -o $@ $< g++ -c $(CFLAGS) -DGUI -o $@ $<
cryptopp/obj/%.o: cryptopp/%.cpp cryptopp/obj/%.o: cryptopp/%.cpp
g++ -c $(CFLAGS) -O3 -DCRYPTOPP_DISABLE_SSE2 -o $@ $< g++ -c $(CFLAGS) -O3 -DCRYPTOPP_DISABLE_SSE2 -o $@ $<

60
script.cpp

@ -16,6 +16,7 @@ static const CBigNum bnZero(0);
static const CBigNum bnOne(1); static const CBigNum bnOne(1);
static const CBigNum bnFalse(0); static const CBigNum bnFalse(0);
static const CBigNum bnTrue(1); static const CBigNum bnTrue(1);
static const size_t nMaxNumSize = 258;
bool CastToBool(const valtype& vch) bool CastToBool(const valtype& vch)
@ -53,8 +54,12 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
vector<valtype> altstack; vector<valtype> altstack;
if (pvStackRet) if (pvStackRet)
pvStackRet->clear(); pvStackRet->clear();
if (script.size() > 20000)
return false;
try
{
while (pc < pend) while (pc < pend)
{ {
bool fExec = !count(vfExec.begin(), vfExec.end(), false); bool fExec = !count(vfExec.begin(), vfExec.end(), false);
@ -66,6 +71,8 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
valtype vchPushValue; valtype vchPushValue;
if (!script.GetOp(pc, opcode, vchPushValue)) if (!script.GetOp(pc, opcode, vchPushValue))
return false; return false;
if (vchPushValue.size() > 5000)
return false;
if (fExec && opcode <= OP_PUSHDATA4) if (fExec && opcode <= OP_PUSHDATA4)
stack.push_back(vchPushValue); stack.push_back(vchPushValue);
@ -104,19 +111,20 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
// Control // Control
// //
case OP_NOP: case OP_NOP:
case OP_NOP1: case OP_NOP2: case OP_NOP3: case OP_NOP4: case OP_NOP5:
case OP_NOP6: case OP_NOP7: case OP_NOP8: case OP_NOP9: case OP_NOP10:
break; break;
case OP_VER: case OP_VER:
case OP_VERIF:
case OP_VERNOTIF:
{ {
CBigNum bn(VERSION); return false;
stack.push_back(bn.getvch());
} }
break; break;
case OP_IF: case OP_IF:
case OP_NOTIF: case OP_NOTIF:
case OP_VERIF:
case OP_VERNOTIF:
{ {
// <expression> if [statements] [else [statements]] endif // <expression> if [statements] [else [statements]] endif
bool fValue = false; bool fValue = false;
@ -125,11 +133,8 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
if (stack.size() < 1) if (stack.size() < 1)
return false; return false;
valtype& vch = stacktop(-1); valtype& vch = stacktop(-1);
if (opcode == OP_VERIF || opcode == OP_VERNOTIF)
fValue = (CBigNum(VERSION) >= CBigNum(vch));
else
fValue = CastToBool(vch); fValue = CastToBool(vch);
if (opcode == OP_NOTIF || opcode == OP_VERNOTIF) if (opcode == OP_NOTIF)
fValue = !fValue; fValue = !fValue;
stack.pop_back(); stack.pop_back();
} }
@ -163,13 +168,13 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
if (fValue) if (fValue)
stack.pop_back(); stack.pop_back();
else else
pc = pend; return false;
} }
break; break;
case OP_RETURN: case OP_RETURN:
{ {
pc = pend; return false;
} }
break; break;
@ -383,6 +388,8 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
valtype& vch2 = stacktop(-1); valtype& vch2 = stacktop(-1);
vch1.insert(vch1.end(), vch2.begin(), vch2.end()); vch1.insert(vch1.end(), vch2.begin(), vch2.end());
stack.pop_back(); stack.pop_back();
if (stacktop(-1).size() > 5000)
return false;
} }
break; break;
@ -504,7 +511,7 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
if (fEqual) if (fEqual)
stack.pop_back(); stack.pop_back();
else else
pc = pend; return false;
} }
} }
break; break;
@ -525,6 +532,8 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
// (in -- out) // (in -- out)
if (stack.size() < 1) if (stack.size() < 1)
return false; return false;
if (stacktop(-1).size() > nMaxNumSize)
return false;
CBigNum bn(stacktop(-1)); CBigNum bn(stacktop(-1));
switch (opcode) switch (opcode)
{ {
@ -564,6 +573,9 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
// (x1 x2 -- out) // (x1 x2 -- out)
if (stack.size() < 2) if (stack.size() < 2)
return false; return false;
if (stacktop(-2).size() > nMaxNumSize ||
stacktop(-1).size() > nMaxNumSize)
return false;
CBigNum bn1(stacktop(-2)); CBigNum bn1(stacktop(-2));
CBigNum bn2(stacktop(-1)); CBigNum bn2(stacktop(-1));
CBigNum bn; CBigNum bn;
@ -593,13 +605,13 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
break; break;
case OP_LSHIFT: case OP_LSHIFT:
if (bn2 < bnZero) if (bn2 < bnZero || bn2 > CBigNum(2048))
return false; return false;
bn = bn1 << bn2.getulong(); bn = bn1 << bn2.getulong();
break; break;
case OP_RSHIFT: case OP_RSHIFT:
if (bn2 < bnZero) if (bn2 < bnZero || bn2 > CBigNum(2048))
return false; return false;
bn = bn1 >> bn2.getulong(); bn = bn1 >> bn2.getulong();
break; break;
@ -625,7 +637,7 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
if (CastToBool(stacktop(-1))) if (CastToBool(stacktop(-1)))
stack.pop_back(); stack.pop_back();
else else
pc = pend; return false;
} }
} }
break; break;
@ -635,6 +647,10 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
// (x min max -- out) // (x min max -- out)
if (stack.size() < 3) if (stack.size() < 3)
return false; return false;
if (stacktop(-3).size() > nMaxNumSize ||
stacktop(-2).size() > nMaxNumSize ||
stacktop(-1).size() > nMaxNumSize)
return false;
CBigNum bn1(stacktop(-3)); CBigNum bn1(stacktop(-3));
CBigNum bn2(stacktop(-2)); CBigNum bn2(stacktop(-2));
CBigNum bn3(stacktop(-1)); CBigNum bn3(stacktop(-1));
@ -719,7 +735,7 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
if (fSuccess) if (fSuccess)
stack.pop_back(); stack.pop_back();
else else
pc = pend; return false;
} }
} }
break; break;
@ -789,7 +805,7 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
if (fSuccess) if (fSuccess)
stack.pop_back(); stack.pop_back();
else else
pc = pend; return false;
} }
} }
break; break;
@ -797,8 +813,20 @@ bool EvalScript(const CScript& script, const CTransaction& txTo, unsigned int nI
default: default:
return false; return false;
} }
// Size limits
if (stack.size() + altstack.size() > 1000)
return false;
}
} }
catch (...)
{
return false;
}
if (!vfExec.empty())
return false;
if (pvStackRet) if (pvStackRet)
*pvStackRet = stack; *pvStackRet = stack;

27
script.h

@ -136,6 +136,20 @@ enum opcodetype
OP_CHECKMULTISIG, OP_CHECKMULTISIG,
OP_CHECKMULTISIGVERIFY, OP_CHECKMULTISIGVERIFY,
// expansion
OP_NOP1,
OP_NOP2,
OP_NOP3,
OP_NOP4,
OP_NOP5,
OP_NOP6,
OP_NOP7,
OP_NOP8,
OP_NOP9,
OP_NOP10,
// multi-byte opcodes // multi-byte opcodes
OP_SINGLEBYTE_END = 0xF0, OP_SINGLEBYTE_END = 0xF0,
@ -276,6 +290,18 @@ inline const char* GetOpName(opcodetype opcode)
case OP_CHECKMULTISIG : return "OP_CHECKMULTISIG"; case OP_CHECKMULTISIG : return "OP_CHECKMULTISIG";
case OP_CHECKMULTISIGVERIFY : return "OP_CHECKMULTISIGVERIFY"; case OP_CHECKMULTISIGVERIFY : return "OP_CHECKMULTISIGVERIFY";
// expanson
case OP_NOP1 : return "OP_NOP1";
case OP_NOP2 : return "OP_NOP2";
case OP_NOP3 : return "OP_NOP3";
case OP_NOP4 : return "OP_NOP4";
case OP_NOP5 : return "OP_NOP5";
case OP_NOP6 : return "OP_NOP6";
case OP_NOP7 : return "OP_NOP7";
case OP_NOP8 : return "OP_NOP8";
case OP_NOP9 : return "OP_NOP9";
case OP_NOP10 : return "OP_NOP10";
// multi-byte opcodes // multi-byte opcodes
@ -285,7 +311,6 @@ inline const char* GetOpName(opcodetype opcode)
case OP_PUBKEYHASH : return "OP_PUBKEYHASH"; case OP_PUBKEYHASH : return "OP_PUBKEYHASH";
case OP_INVALIDOPCODE : return "OP_INVALIDOPCODE"; case OP_INVALIDOPCODE : return "OP_INVALIDOPCODE";
default: default:
return "UNKNOWN_OPCODE"; return "UNKNOWN_OPCODE";

4
serialize.h

@ -19,8 +19,8 @@ class CScript;
class CDataStream; class CDataStream;
class CAutoFile; class CAutoFile;
static const int VERSION = 304; static const int VERSION = 306;
static const char* pszSubVer = ".0"; static const char* pszSubVer = "";

6
setup.nsi

@ -7,7 +7,7 @@ RequestExecutionLevel highest
# General Symbol Definitions # General Symbol Definitions
!define REGKEY "SOFTWARE\$(^Name)" !define REGKEY "SOFTWARE\$(^Name)"
!define VERSION 0.3.3 !define VERSION 0.3.6
!define COMPANY "Bitcoin project" !define COMPANY "Bitcoin project"
!define URL http://www.bitcoin.org/ !define URL http://www.bitcoin.org/
@ -42,12 +42,12 @@ Var StartMenuGroup
!insertmacro MUI_LANGUAGE English !insertmacro MUI_LANGUAGE English
# Installer attributes # Installer attributes
OutFile bitcoin-0.3.3-win32-setup.exe OutFile bitcoin-0.3.6-win32-setup.exe
InstallDir $PROGRAMFILES\Bitcoin InstallDir $PROGRAMFILES\Bitcoin
CRCCheck on CRCCheck on
XPStyle on XPStyle on
ShowInstDetails show ShowInstDetails show
VIProductVersion 0.3.3.0 VIProductVersion 0.3.6.0
VIAddVersionKey ProductName Bitcoin VIAddVersionKey ProductName Bitcoin
VIAddVersionKey ProductVersion "${VERSION}" VIAddVersionKey ProductVersion "${VERSION}"
VIAddVersionKey CompanyName "${COMPANY}" VIAddVersionKey CompanyName "${COMPANY}"

Loading…
Cancel
Save