From 7ff3d5f8718746d23c97d37caa3946de06fd580e Mon Sep 17 00:00:00 2001
From: "Owain G. Ainsworth" <oga@conformal.com>
Date: Tue, 8 Oct 2013 23:21:40 +0100
Subject: [PATCH] Handle sign extended numbers in parsing variable length
 opcodes.

---
 script.go | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/script.go b/script.go
index 3488d184..9c98a703 100644
--- a/script.go
+++ b/script.go
@@ -330,7 +330,9 @@ func parseScriptTemplate(script []byte, opcodemap map[byte]*opcode) ([]parsedOpc
 				return nil, err
 			}
 			off = i + 1 - op.length // beginning of data
-			if int(l) > len(script[off:]) {
+			// Disallow entries that do not fit script or were
+			// sign extended.
+			if int(l) >= len(script[off:]) || int(l) < 0 {
 				return retScript, StackErrShortScript
 			}
 			pop.data = script[off : off+int(l)]