From 71cb15d007ffff9ca0aa5fe38df2c2b7a3fc2aa9 Mon Sep 17 00:00:00 2001 From: Jonny Barnes Date: Sun, 11 Jun 2023 12:52:07 +0100 Subject: [PATCH] refactor: Improve note ID validation and error handling - Improve input validation and error handling in Note model - Add test case for out-of-range note IDs in NotesController --- app/Models/Note.php | 8 ++++++++ public/assets/app.js.br | Bin 16694 -> 16618 bytes tests/Feature/NotesControllerTest.php | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/app/Models/Note.php b/app/Models/Note.php index bbed5e62..270bf58b 100644 --- a/app/Models/Note.php +++ b/app/Models/Note.php @@ -12,6 +12,7 @@ use GuzzleHttp\Client; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; @@ -286,6 +287,13 @@ class Note extends Model */ public function scopeNb60(Builder $query, string $nb60id): Builder { + $realId = resolve(Numbers::class)->b60tonum($nb60id); + + // Check nb60 does not translate to ID too big for database int4 column + if ($realId > 2_147_483_647) { + abort(404); + } + return $query->where('id', resolve(Numbers::class)->b60tonum($nb60id)); } diff --git a/public/assets/app.js.br b/public/assets/app.js.br index 961f6a0332b68f0ba0ac53e20328d3e031234540..eac06b5426ca72ff6f3a743c3ab89561721be8e5 100644 GIT binary patch literal 16618 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 literal 16694 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 R8get('/notes/112233'); $response->assertNotFound(); } + + /** @test */ + public function checkNoteIdNotOutOfRange(): void + { + $response = $this->get('/notes/photou-photologo'); + $response->assertNotFound(); + } }