Skip to content

Commit 572adf8

Browse files
authored
Merge branch 'master' into fix-serve-tests
2 parents 3302d66 + 36fd82f commit 572adf8

16 files changed

Lines changed: 89 additions & 16 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Changelog
22

3+
## v3.3.0 (2025-12-19)
4+
5+
### Features
6+
* AWS_Batch: queueing of training jobs with ModelTrainer
7+
### Bug fixes and Other Changes
8+
* Fixes for model registry with ModelBuilder
9+
310
## v3.2.0 (2025-12-18)
411

512
### Features

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.2.0
1+
3.3.0

pyproject.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ classifiers = [
3333
"Programming Language :: Python :: 3.12",
3434
]
3535
dependencies = [
36-
"sagemaker-core>=2.2.0,<3.0.0",
37-
"sagemaker-train>=1.2.0,<2.0.0",
38-
"sagemaker-serve>=1.2.0,<2.0.0",
39-
"sagemaker-mlops>=1.2.0,<2.0.0",
36+
"sagemaker-core>=2.3.0,<3.0.0",
37+
"sagemaker-train>=1.3.0,<2.0.0",
38+
"sagemaker-serve>=1.3.0,<2.0.0",
39+
"sagemaker-mlops>=1.3.0,<2.0.0",
4040
]
4141

4242
[project.optional-dependencies]

sagemaker-core/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog
22

3+
## v2.3.0 (2025-12-19)
4+
5+
### Feature
6+
* AWS_Batch: queueing of training jobs with ModelTrainer
7+
38
## v2.2.0 (2025-12-18)
49

510
### Bug Fixes

sagemaker-core/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
2.2.0
1+
2.3.0
22

sagemaker-core/src/sagemaker/core/remote_function/client.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,9 @@ def remote(
303303
"""
304304

305305
def _remote(func):
306+
307+
if job_conda_env:
308+
RemoteExecutor._validate_env_name(job_conda_env)
306309

307310
job_settings = _JobSettings(
308311
dependencies=dependencies,
@@ -774,6 +777,9 @@ def __init__(
774777
+ "without spark_config or use_torchrun or use_mpirun. "
775778
+ "Please provide instance_count = 1"
776779
)
780+
781+
if job_conda_env:
782+
self._validate_env_name(job_conda_env)
777783

778784
self.job_settings = _JobSettings(
779785
dependencies=dependencies,
@@ -951,6 +957,25 @@ def _validate_submit_args(func, *args, **kwargs):
951957
+ f"{'arguments' if len(missing_kwargs) > 1 else 'argument'}: "
952958
+ f"{missing_kwargs_string}"
953959
)
960+
961+
@staticmethod
962+
def _validate_env_name(env_name: str) -> None:
963+
"""Validate conda environment name to prevent command injection.
964+
965+
Args:
966+
env_name (str): The environment name to validate
967+
968+
Raises:
969+
ValueError: If the environment name contains invalid characters
970+
"""
971+
972+
# Allow only alphanumeric, underscore, and hyphen
973+
import re
974+
if not re.match(r'^[a-zA-Z0-9_-]+$', env_name):
975+
raise ValueError(
976+
f"Invalid environment name '{env_name}'. "
977+
"Only alphanumeric characters, underscores, and hyphens are allowed."
978+
)
954979

955980

956981
class Future(object):

sagemaker-core/tests/unit/remote_function/test_client.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,28 @@ def my_function(x):
6464

6565
with pytest.raises(TypeError):
6666
RemoteExecutor._validate_submit_args(my_function, 1, 2)
67-
67+
68+
def test_validate_env_names_valid(self):
69+
"""Test valid conda environment names"""
70+
valid_names = [
71+
"myenv",
72+
"base",
73+
"py39",
74+
"env123",
75+
]
76+
for name in valid_names:
77+
RemoteExecutor._validate_env_name(name)
78+
79+
def test_validate_env_names_invalid(self):
80+
"""Test invalid conda environment names"""
81+
invalid_names = [
82+
"env && echo PWNED",
83+
"env > /tmp/output.txt",
84+
"sagemaker-rce-env; echo PWNED_FROM_CONDA_ENV > /tmp/conda_rce.txt #",
85+
]
86+
for name in invalid_names:
87+
with pytest.raises(ValueError):
88+
RemoteExecutor._validate_env_name(name)
6889

6990
class TestWorkerFunctions:
7091
"""Test worker thread functions"""

sagemaker-mlops/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## v1.3.0 (2025-12-19)
4+
5+
* Update module dependencies
6+
37
## v1.2.0 (2025-12-18)
48

59
* Update module dependencies

sagemaker-mlops/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.2.0
1+
1.3.0

sagemaker-mlops/pyproject.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ classifiers = [
2222
"Programming Language :: Python :: 3.12",
2323
]
2424
dependencies = [
25-
"sagemaker-core>=2.2.0",
26-
"sagemaker-train>=1.2.0",
27-
"sagemaker-serve>=1.2.0",
25+
"sagemaker-core>=2.3.0",
26+
"sagemaker-train>=1.3.0",
27+
"sagemaker-serve>=1.3.0",
2828
"boto3>=1.42.2,<2.0",
2929
"botocore>=1.42.2,<2.0",
3030
]

0 commit comments

Comments
 (0)