Merge fix for issue #24285 from 3.5
diff --git a/Lib/test/test_importlib/extension/test_loader.py b/Lib/test/test_importlib/extension/test_loader.py
index 66ac2b1..5813ade 100644
--- a/Lib/test/test_importlib/extension/test_loader.py
+++ b/Lib/test/test_importlib/extension/test_loader.py
@@ -170,6 +170,13 @@
         loader.exec_module(module)
         return module
 
+    def test_load_submodule(self):
+        '''Test loading a simulated submodule'''
+        module = self.load_module_by_name('pkg.' + self.name)
+        self.assertIsInstance(module, types.ModuleType)
+        self.assertEqual(module.__name__, 'pkg.' + self.name)
+        self.assertEqual(module.str_const, 'something different')
+
     def test_load_twice(self):
         '''Test that 2 loads result in 2 module objects'''
         module1 = self.load_module_by_name(self.name)
diff --git a/Misc/NEWS b/Misc/NEWS
index 689b6ae..a01c238 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -22,6 +22,9 @@
 Core and Builtins
 -----------------
 
+- Issue #24285: Fixed regression that prevented importing extension modules
+  from inside packages. Patch by Petr Viktorin.
+
 Library
 -------
 
@@ -36,7 +39,8 @@
 
 - Issue #24276: Fixed optimization of property descriptor getter.
 
-- Issue #24268: PEP 489: Multi-phase extension module initialization
+- Issue #24268: PEP 489: Multi-phase extension module initialization.
+  Patch by Petr Viktorin.
 
 - Issue #23955: Add pyvenv.cfg option to suppress registry/environment
   lookup for generating sys.path on Windows.
diff --git a/Python/importdl.c b/Python/importdl.c
index bb90391..579d2c5 100644
--- a/Python/importdl.c
+++ b/Python/importdl.c
@@ -45,7 +45,7 @@
     if (lastdot < -1) {
         return NULL;
     } else if (lastdot >= 0) {
-        tmp = PyUnicode_Substring(name, lastdot, name_len);
+        tmp = PyUnicode_Substring(name, lastdot + 1, name_len);
         if (tmp == NULL)
             return NULL;
         name = tmp;