Author: Shivam Mathur (shivammathur)
Date: 2025-11-19T16:00:09+05:30

Commit: 
https://github.com/php/web-downloads/commit/01928cc490ceedecf642c9e2594202939b10d50f
Raw diff: 
https://github.com/php/web-downloads/commit/01928cc490ceedecf642c9e2594202939b10d50f.diff

Implement review suggestions

Changed paths:
  M  API.md
  M  src/Console/Command/SeriesDeleteCommand.php
  M  src/Console/Command/SeriesInitCommand.php
  M  src/Console/Command/SeriesStabilityCommand.php
  M  src/Console/Command/SeriesUpdateCommand.php
  M  src/Http/Controllers/SeriesUpdateController.php
  M  src/Http/Controllers/WinlibsController.php


Diff:

diff --git a/API.md b/API.md
index 2933363..8f324ea 100644
--- a/API.md
+++ b/API.md
@@ -136,7 +136,7 @@ curl -i -X POST \
 - Auth: Required
 - Purpose: Record metadata and fetch all artifacts for a specific GitHub 
Actions workflow run of 
[`winlibs/winlib-builder`](https://github.com/winlibs/winlib-builder).
 - Request body (JSON):
-    - `library` (string, required)
+    - `library` (string, required): matching `^[a-zA-Z0-9_-]+$`
     - `ref` (string, required)
     - `type` (string, required): `php`, or `pecl`.
     - `workflow_run_id` (string, required)
@@ -224,13 +224,13 @@ curl -i -X POST \
 ### POST /api/series-update
 
 - Auth: Required
-- Purpose: Queue an update to a library entry in a series packages file, or 
remove it entirely.
+- Purpose: Update a library entry in a series packages file, or remove it 
entirely.
 - Request body (JSON):
     - `php_version` (string, required): Matches `^(\d+\.\d+|master)$`.
     - `vs_version` (string, required): Matches `^v[c|s]\d{2}$`.
     - `stability` (string, required): Either `stable` or `staging`.
     - `library` (string, required): Library identifier to update/remove.
-    - `ref` (string, required but may be empty): When non-empty, 
updates/creates entries named `<library>-<ref>-<vs_version>-<arch>.zip` for 
both `x86` and `x64`; when empty, removes the library from both files if 
present.
+    - `ref` (string, required but may be empty): Matches 
`^([a-zA-Z0-9\.-]+)?$`, When empty, removes the library.
 - Success: `200 OK`, empty body.
 - Errors:
     - `400` with validation details if the payload is invalid.
diff --git a/src/Console/Command/SeriesDeleteCommand.php 
b/src/Console/Command/SeriesDeleteCommand.php
index 797407d..1c79daf 100644
--- a/src/Console/Command/SeriesDeleteCommand.php
+++ b/src/Console/Command/SeriesDeleteCommand.php
@@ -28,7 +28,7 @@ public function handle(): int
 
             $series_directory = $buildsDirectory . '/series';
             if(!is_dir($series_directory)) {
-                return Command::SUCCESS;
+                throw new Exception('Series directory does not exist');
             }
 
             $files = glob($series_directory . '/series-delete-*.json');
diff --git a/src/Console/Command/SeriesInitCommand.php 
b/src/Console/Command/SeriesInitCommand.php
index 53c4dfd..6ff80ab 100644
--- a/src/Console/Command/SeriesInitCommand.php
+++ b/src/Console/Command/SeriesInitCommand.php
@@ -28,7 +28,7 @@ public function handle(): int
 
             $series_directory = $buildsDirectory . '/series';
             if(!is_dir($series_directory)) {
-                return Command::SUCCESS;
+                throw new Exception('Series directory does not exist');
             }
 
             $files = glob($series_directory . '/series-init-*.json');
diff --git a/src/Console/Command/SeriesStabilityCommand.php 
b/src/Console/Command/SeriesStabilityCommand.php
index c8cfcfd..2ff6af4 100644
--- a/src/Console/Command/SeriesStabilityCommand.php
+++ b/src/Console/Command/SeriesStabilityCommand.php
@@ -28,7 +28,7 @@ public function handle(): int
 
             $series_directory = $buildsDirectory . '/series';
             if(!is_dir($series_directory)) {
-                return Command::SUCCESS;
+                throw new Exception('Series directory does not exist');
             }
 
             $files = glob($series_directory . '/series-stability-*.json');
diff --git a/src/Console/Command/SeriesUpdateCommand.php 
b/src/Console/Command/SeriesUpdateCommand.php
index f50362f..e72ba8f 100644
--- a/src/Console/Command/SeriesUpdateCommand.php
+++ b/src/Console/Command/SeriesUpdateCommand.php
@@ -28,7 +28,7 @@ public function handle(): int
 
             $seriesDirectory = $buildsDirectory . '/series';
             if (!is_dir($seriesDirectory)) {
-                return Command::SUCCESS;
+                throw new Exception('Series directory does not exist');
             }
 
             $tasks = glob($seriesDirectory . '/series-update-*.json');
diff --git a/src/Http/Controllers/SeriesUpdateController.php 
b/src/Http/Controllers/SeriesUpdateController.php
index f36d44e..9492ac8 100644
--- a/src/Http/Controllers/SeriesUpdateController.php
+++ b/src/Http/Controllers/SeriesUpdateController.php
@@ -14,8 +14,8 @@ protected function validate(array $data): bool
             'php_version' => 'required|string|regex:/^(?:\d+\.\d+|master)$/',
             'vs_version' => 'required|string|regex:/^v[c|s]\d{2}$/',
             'stability' => 'required|string|regex:/^(stable|staging)$/',
-            'library' => 'required|string',
-            'ref' => 'string',
+            'library' => 'required|string|regex:/^[a-zA-Z0-9_-]+$/',
+            'ref' => 'string|regex:/^([a-zA-Z0-9\.-]+)?$/',
         ]);
 
         $validator->validate($data);
diff --git a/src/Http/Controllers/WinlibsController.php 
b/src/Http/Controllers/WinlibsController.php
index 2679c20..e582be1 100644
--- a/src/Http/Controllers/WinlibsController.php
+++ b/src/Http/Controllers/WinlibsController.php
@@ -12,8 +12,8 @@ class WinlibsController extends BaseController
     protected function validate(array $data): bool
     {
         $validator = new Validator([
-            'library' => 'required|string',
-            'ref' => 'required|string',
+            'library' => 'required|string|regex:/^[a-zA-Z0-9_-]+$/',
+            'ref' => 'required|string|regex:/^[a-zA-Z0-9\.-]+$/',
             'type' => 'required|string|regex:/^(php|pecl)$/',
             'workflow_run_id' => 'required|string',
             'php_versions' => 
'required|string|regex:/^(?:\d+\.\d+|master)(?:,\s*(?:\d+\.\d+|master))*$/',

Reply via email to