Align C and Rust handling of AccountInfos (#8906)
This commit is contained in:
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
extern uint64_t entrypoint(const uint8_t *input) {
|
extern uint64_t entrypoint(const uint8_t *input) {
|
||||||
SolKeyedAccount ka[4];
|
SolKeyedAccount ka[1];
|
||||||
SolParameters params = (SolParameters) { .ka = ka };
|
SolParameters params = (SolParameters) { .ka = ka };
|
||||||
|
|
||||||
if (!sol_deserialize(input, ¶ms, SOL_ARRAY_SIZE(ka))) {
|
if (!sol_deserialize(input, ¶ms, SOL_ARRAY_SIZE(ka))) {
|
||||||
|
@ -284,13 +284,29 @@ SOL_FN_PREFIX bool sol_deserialize(
|
|||||||
}
|
}
|
||||||
params->ka_num = *(uint64_t *) input;
|
params->ka_num = *(uint64_t *) input;
|
||||||
input += sizeof(uint64_t);
|
input += sizeof(uint64_t);
|
||||||
if (ka_num < params->ka_num) {
|
|
||||||
|
if (ka_num > params->ka_num) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < params->ka_num; i++) {
|
for (int i = 0; i < params->ka_num; i++) {
|
||||||
uint8_t dup_info = input[0];
|
uint8_t dup_info = input[0];
|
||||||
input += sizeof(uint8_t);
|
input += sizeof(uint8_t);
|
||||||
|
|
||||||
|
if (i >= ka_num) {
|
||||||
|
if (dup_info == UINT8_MAX) {
|
||||||
|
input += sizeof(uint8_t);
|
||||||
|
input += sizeof(uint8_t);
|
||||||
|
input += sizeof(SolPubkey);
|
||||||
|
input += sizeof(uint64_t);
|
||||||
|
input += *(uint64_t *) input;
|
||||||
|
input += sizeof(uint64_t);
|
||||||
|
input += sizeof(SolPubkey);
|
||||||
|
input += sizeof(uint8_t);
|
||||||
|
input += sizeof(uint64_t);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (dup_info == UINT8_MAX) {
|
if (dup_info == UINT8_MAX) {
|
||||||
// is signer?
|
// is signer?
|
||||||
params->ka[i].is_signer = *(uint8_t *) input != 0;
|
params->ka[i].is_signer = *(uint8_t *) input != 0;
|
||||||
@ -418,7 +434,6 @@ SOL_FN_PREFIX void sol_log_params(const SolParameters *params) {
|
|||||||
*/
|
*/
|
||||||
uint64_t entrypoint(const uint8_t *input);
|
uint64_t entrypoint(const uint8_t *input);
|
||||||
|
|
||||||
|
|
||||||
#ifdef SOL_TEST
|
#ifdef SOL_TEST
|
||||||
/**
|
/**
|
||||||
* Stub log functions when building tests
|
* Stub log functions when building tests
|
||||||
|
Reference in New Issue
Block a user