lib/nbt: Prevent addition of additional end tags to compounds
parent
71834e1018
commit
7be73f86d4
|
@ -988,9 +988,16 @@ namespace NBT {
|
|||
}
|
||||
|
||||
ErrorOrVoid Compound::setElementPointerAt(uint64_t position, Generic* pointer) {
|
||||
// built-in end tag
|
||||
if (position == this->tags.size()) {
|
||||
return ErrorOrVoid(true, ErrorCodes::NOT_ALLOWED);
|
||||
if (position == this->tags.size() || pointer->getTagType() == TagType::END) {
|
||||
if (position == this->tags.size() && pointer->getTagType() == TagType::END) {
|
||||
delete pointer;
|
||||
// do nothing, already have one of those
|
||||
} else {
|
||||
delete pointer;
|
||||
// End tags may only go at the end and
|
||||
// the end may only hold an end tag.
|
||||
return ErrorOrVoid(true, ErrorCodes::NOT_ALLOWED);
|
||||
}
|
||||
}
|
||||
if (position > this->tags.size()) {
|
||||
return ErrorOrVoid(true, ErrorCodes::OUT_OF_RANGE);
|
||||
|
@ -1002,8 +1009,12 @@ namespace NBT {
|
|||
return ErrorOrVoid();
|
||||
}
|
||||
|
||||
void Compound::appendPointer(Generic* pointer) {
|
||||
ErrorOrVoid Compound::appendPointer(Generic* pointer) {
|
||||
if (pointer->getTagType() == TagType::END) {
|
||||
return ErrorOrVoid(true, ErrorCodes::NOT_ALLOWED);
|
||||
}
|
||||
this->tags.push_back(pointer);
|
||||
return ErrorOrVoid();
|
||||
}
|
||||
|
||||
ErrorOrVoid Compound::deleteElement(uint64_t position) {
|
||||
|
|
|
@ -257,7 +257,7 @@ namespace NBT {
|
|||
|
||||
ErrorOr<Generic*> getElementPointer(uint64_t position);
|
||||
ErrorOrVoid setElementPointerAt(uint64_t position, Generic* pointer);
|
||||
void appendPointer(Generic* pointer);
|
||||
ErrorOrVoid appendPointer(Generic* pointer);
|
||||
ErrorOrVoid deleteElement(uint64_t position);
|
||||
uint64_t length();
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue