Skip to content

Commit 8081340

Browse files
feat(pdp): enforce extraData size limits (#807)
1 parent 6814fed commit 8081340

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

pdp/handlers.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,17 @@ import (
3636
// PDPRoutePath is the base path for PDP routes
3737
const PDPRoutePath = "/pdp"
3838

39+
const (
40+
// MaxCreateDataSetExtraDataSize defines the limit for extraData size in CreateDataSet calls (4KB).
41+
MaxCreateDataSetExtraDataSize = 4096
42+
43+
// MaxAddPiecesExtraDataSize defines the limit for extraData size in AddPieces calls (8KB).
44+
MaxAddPiecesExtraDataSize = 8192
45+
46+
// MaxDeletePieceExtraDataSize defines the limit for extraData size in DeletePiece calls (256B).
47+
MaxDeletePieceExtraDataSize = 256
48+
)
49+
3950
// PDPService represents the service for managing data sets and pieces
4051
type PDPService struct {
4152
Auth
@@ -865,6 +876,11 @@ func (p *PDPService) handleDeleteDataSetPiece(w http.ResponseWriter, r *http.Req
865876
http.Error(w, "Invalid extraData format (must be hex encoded)", http.StatusBadRequest)
866877
return
867878
}
879+
if len(extraDataBytes) > MaxDeletePieceExtraDataSize {
880+
errMsg := fmt.Sprintf("extraData size (%d bytes) exceeds the maximum allowed limit for DeletePiece (%d bytes)", len(extraDataBytes), MaxDeletePieceExtraDataSize)
881+
http.Error(w, errMsg, http.StatusBadRequest)
882+
return
883+
}
868884
}
869885

870886
// Check if we have this piece or not

pdp/handlers_add.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,11 @@ func (p *PDPService) handleAddPieceToDataSet(w http.ResponseWriter, r *http.Requ
329329
http.Error(w, "Invalid extraData format (must be hex encoded): "+err.Error(), http.StatusBadRequest)
330330
return
331331
}
332+
if len(extraDataBytes) > MaxAddPiecesExtraDataSize {
333+
errMsg := fmt.Sprintf("extraData size (%d bytes) exceeds the maximum allowed limit for AddPieces (%d bytes)", len(extraDataBytes), MaxAddPiecesExtraDataSize)
334+
http.Error(w, errMsg, http.StatusBadRequest)
335+
return
336+
}
332337

333338
// Step 4: Prepare piece information
334339
pieceDataArray, subPieceInfoMap, subPieceCidList, err := p.transformAddPiecesRequest(ctx, serviceLabel, payload.Pieces)

pdp/handlers_create.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package pdp
33
import (
44
"encoding/hex"
55
"encoding/json"
6+
"fmt"
67
"io"
78
"math/big"
89
"net/http"
@@ -64,6 +65,11 @@ func (p *PDPService) handleCreateDataSetAndAddPieces(w http.ResponseWriter, r *h
6465
http.Error(w, "Invalid extraData format (must be hex encoded)", http.StatusBadRequest)
6566
return
6667
}
68+
if len(extraDataBytes) > MaxAddPiecesExtraDataSize {
69+
errMsg := fmt.Sprintf("extraData size (%d bytes) exceeds the maximum allowed limit for CreateDataSetAndAddPieces (%d bytes)", len(extraDataBytes), MaxAddPiecesExtraDataSize)
70+
http.Error(w, errMsg, http.StatusBadRequest)
71+
return
72+
}
6773

6874
// Check if indexing is needed by decoding the extraData
6975
mustIndex, err := CheckIfIndexingNeededFromExtraData(extraDataBytes)
@@ -224,6 +230,11 @@ func (p *PDPService) handleCreateDataSet(w http.ResponseWriter, r *http.Request)
224230
http.Error(w, "Invalid extraData format (must be hex encoded): "+err.Error(), http.StatusBadRequest)
225231
return
226232
}
233+
if len(extraDataBytes) > MaxCreateDataSetExtraDataSize {
234+
errMsg := fmt.Sprintf("extraData size (%d bytes) exceeds the maximum allowed limit for CreateDataSet (%d bytes)", len(extraDataBytes), MaxCreateDataSetExtraDataSize)
235+
http.Error(w, errMsg, http.StatusBadRequest)
236+
return
237+
}
227238

228239
// Step 3: Get the sender address from 'eth_keys' table where role = 'pdp' limit 1
229240
fromAddress, err := p.getSenderAddress(ctx)

0 commit comments

Comments
 (0)