Skip to content

Commit 82f8b9e

Browse files
committed
Merge 0eb2ea5 into merged_master (Elements PR ElementsProject#1425)
2 parents f03f4b8 + 0eb2ea5 commit 82f8b9e

File tree

4 files changed

+15
-9
lines changed

4 files changed

+15
-9
lines changed

src/script/interpreter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2644,7 +2644,7 @@ void PrecomputedTransactionData::Init(const T& txTo, std::vector<CTxOut>&& spent
26442644
simplicityRawTx.version = txTo.nVersion;
26452645
simplicityRawTx.lockTime = txTo.nLockTime;
26462646

2647-
m_simplicity_tx_data = simplicity_elements_mallocTransaction(&simplicityRawTx);
2647+
m_simplicity_tx_data = SimplicityTransactionUniquePtr(simplicity_elements_mallocTransaction(&simplicityRawTx));
26482648

26492649
m_bip341_taproot_ready = true;
26502650
}
@@ -3096,7 +3096,7 @@ bool GenericTransactionSignatureChecker<T>::CheckSimplicity(const valtype& progr
30963096

30973097
assert(txdata->m_simplicity_tx_data);
30983098
assert(simplicityTapEnv);
3099-
if (!simplicity_elements_execSimplicity(&error, nullptr, txdata->m_simplicity_tx_data, nIn, simplicityTapEnv, txdata->m_hash_genesis_block.data(), budget, nullptr, program.data(), program.size(), witness.data(), witness.size())) {
3099+
if (!simplicity_elements_execSimplicity(&error, 0, txdata->m_simplicity_tx_data.get(), nIn, simplicityTapEnv, txdata->m_hash_genesis_block.data(), budget, 0, program.data(), program.size(), witness.data(), witness.size())) {
31003100
assert(!"simplicity_elements_execSimplicity internal error");
31013101
}
31023102
simplicity_elements_freeTapEnv(simplicityTapEnv);

src/script/interpreter.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,9 +169,18 @@ enum : uint32_t {
169169

170170
bool CheckSignatureEncoding(const std::vector<unsigned char> &vchSig, unsigned int flags, ScriptError* serror);
171171

172+
struct SimplicityTransactionDeleter
173+
{
174+
void operator()(transaction* ptr)
175+
{
176+
simplicity_elements_freeTransaction(ptr);
177+
}
178+
};
179+
using SimplicityTransactionUniquePtr = std::unique_ptr<transaction, SimplicityTransactionDeleter>;
180+
172181
struct PrecomputedTransactionData
173182
{
174-
transaction* m_simplicity_tx_data = nullptr;
183+
SimplicityTransactionUniquePtr m_simplicity_tx_data;
175184
// BIP341 precomputed data.
176185
// These are single-SHA256, see https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-16.
177186
uint256 m_prevouts_single_hash;
@@ -221,9 +230,6 @@ struct PrecomputedTransactionData
221230

222231
template <class T>
223232
explicit PrecomputedTransactionData(const T& tx);
224-
~PrecomputedTransactionData() {
225-
simplicity_elements_freeTransaction(m_simplicity_tx_data);
226-
}
227233
};
228234

229235
enum class SigVersion

src/test/fuzz/simplicity.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,13 +204,13 @@ FUZZ_TARGET_INIT(simplicity, initialize_simplicity)
204204
PrecomputedTransactionData txdata{GENESIS_HASH};
205205
std::vector<CTxOut> spent_outs_copy{spent_outs};
206206
txdata.Init(mtx, std::move(spent_outs_copy));
207-
assert(txdata.m_simplicity_tx_data != nullptr);
207+
assert(txdata.m_simplicity_tx_data);
208208

209209
// 4. Main test
210210
unsigned char imr_out[32];
211211
unsigned char *imr = mtx.vin[0].prevout.hash.data()[2] & 2 ? imr_out : nullptr;
212212

213-
const transaction* tx = txdata.m_simplicity_tx_data;
213+
const transaction* tx = txdata.m_simplicity_tx_data.get();
214214
tapEnv* taproot = simplicity_elements_mallocTapEnv(&simplicityRawTap);
215215
simplicity_elements_execSimplicity(&error, imr, tx, nIn, taproot, GENESIS_HASH.data(), budget, amr, prog_bytes.data(), prog_bytes.size(), wit_bytes.data(), wit_bytes.size());
216216

src/test/fuzz/simplicity_tx.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ FUZZ_TARGET_INIT(simplicity_tx, initialize_simplicity_tx)
219219
// that we will allocate Simplicity data. The check for whether to do this is very
220220
// lax: is this a 34-byte scriptPubKey that starts with OP_1 and does it have a
221221
// nonempty witness.
222-
assert(txdata.m_simplicity_tx_data != nullptr);
222+
assert(txdata.m_simplicity_tx_data);
223223
}
224224

225225
const CTransaction tx{mtx};

0 commit comments

Comments
 (0)