Merge pull request #21 from duckietm/main

Sync to dev
This commit is contained in:
DuckieTM
2026-03-23 22:21:18 +01:00
committed by GitHub
4 changed files with 22 additions and 7 deletions
@@ -10,7 +10,7 @@ export class CatalogLocalizationData
this._images = []; this._images = [];
this._texts = []; this._texts = [];
let totalImages = wrapper.readInt(); let totalImages = Math.min(wrapper.readInt(), 100);
while(totalImages > 0) while(totalImages > 0)
{ {
@@ -19,7 +19,7 @@ export class CatalogLocalizationData
totalImages--; totalImages--;
} }
let totalTexts = wrapper.readInt(); let totalTexts = Math.min(wrapper.readInt(), 100);
while(totalTexts > 0) while(totalTexts > 0)
{ {
@@ -28,7 +28,7 @@ export class CatalogPageMessageOfferData
this._products = []; this._products = [];
let totalProducts = wrapper.readInt(); let totalProducts = Math.min(wrapper.readInt(), 200);
while(totalProducts > 0) while(totalProducts > 0)
{ {
@@ -37,7 +37,7 @@ export class CatalogPageMessageParser implements IMessageParser
this._layoutCode = wrapper.readString(); this._layoutCode = wrapper.readString();
this._localization = new CatalogLocalizationData(wrapper); this._localization = new CatalogLocalizationData(wrapper);
let totalOffers = wrapper.readInt(); let totalOffers = Math.min(wrapper.readInt(), 1000);
while(totalOffers > 0) while(totalOffers > 0)
{ {
@@ -51,7 +51,7 @@ export class CatalogPageMessageParser implements IMessageParser
if(wrapper.bytesAvailable) if(wrapper.bytesAvailable)
{ {
let totalFrontPageItems = wrapper.readInt(); let totalFrontPageItems = Math.min(wrapper.readInt(), 100);
while(totalFrontPageItems > 0) while(totalFrontPageItems > 0)
{ {
@@ -31,6 +31,11 @@ export class NodeData
return true; return true;
} }
private static readonly MAX_OFFERS: number = 1000;
private static readonly MAX_CHILDREN: number = 500;
private static _parseDepth: number = 0;
private static readonly MAX_DEPTH: number = 20;
public parse(wrapper: IMessageDataWrapper): boolean public parse(wrapper: IMessageDataWrapper): boolean
{ {
if(!wrapper) return false; if(!wrapper) return false;
@@ -41,7 +46,7 @@ export class NodeData
this._pageName = wrapper.readString(); this._pageName = wrapper.readString();
this._localization = wrapper.readString(); this._localization = wrapper.readString();
let totalOffers = wrapper.readInt(); let totalOffers = Math.min(wrapper.readInt(), NodeData.MAX_OFFERS);
while(totalOffers > 0) while(totalOffers > 0)
{ {
@@ -50,7 +55,15 @@ export class NodeData
totalOffers--; totalOffers--;
} }
let totalChildren = wrapper.readInt(); let totalChildren = Math.min(wrapper.readInt(), NodeData.MAX_CHILDREN);
NodeData._parseDepth++;
if(NodeData._parseDepth > NodeData.MAX_DEPTH)
{
NodeData._parseDepth--;
return true;
}
while(totalChildren > 0) while(totalChildren > 0)
{ {
@@ -59,6 +72,8 @@ export class NodeData
totalChildren--; totalChildren--;
} }
NodeData._parseDepth--;
return true; return true;
} }