diff --git a/io_scene_obj/__init__.py b/io_scene_obj/__init__.py
index 611c95c4e71c5ccb618814095b87b97ff6a7d673..b129f28377bfeadff5a1de4e4012c0ffe20c9993 100644
--- a/io_scene_obj/__init__.py
+++ b/io_scene_obj/__init__.py
@@ -21,7 +21,7 @@
 bl_info = {
     "name": "Wavefront OBJ format",
     "author": "Campbell Barton, Bastien Montagne",
-    "version": (3, 5, 11),
+    "version": (3, 5, 12),
     "blender": (2, 80, 0),
     "location": "File > Import-Export",
     "description": "Import-Export OBJ, Import OBJ mesh, UV's, materials and textures",
diff --git a/io_scene_obj/import_obj.py b/io_scene_obj/import_obj.py
index f03ed2f1510c8becd1be7fabddc27b8e4715c155..c8a09b2a6ba8f8b21a08c34450582c3681e0911a 100644
--- a/io_scene_obj/import_obj.py
+++ b/io_scene_obj/import_obj.py
@@ -357,7 +357,8 @@ def create_materials(filepath, relpath,
                     elif line_id == b'ns':
                         # XXX Totally empirical conversion, trying to adapt it
                         #     (from 0.0 - 900.0 OBJ specular exponent range to 1.0 - 0.0 Principled BSDF range)...
-                        context_mat_wrap.roughness = 1.0 - (sqrt(float_func(line_split[1])) / 30)
+                        val = max(0.0, min(900.0, float_func(line_split[1])))
+                        context_mat_wrap.roughness = 1.0 - (sqrt(val) / 30)
                         context_material_vars.add("roughness")
                     elif line_id == b'ni':  # Refraction index (between 0.001 and 10).
                         context_mat_wrap.ior = float_func(line_split[1])