Browse Source

Only check filenames when end with .py in _CalledFromGeneratedFile() (#4262)

* Cython's stack does not have .py file name. Only check filenames when end with .py for _CalledFromGeneratedFile()
Jie Luo 7 years ago
parent
commit
e34ec6077a
1 changed files with 9 additions and 4 deletions
  1. 9 4
      python/google/protobuf/pyext/descriptor.cc

+ 9 - 4
python/google/protobuf/pyext/descriptor.cc

@@ -107,10 +107,6 @@ bool _CalledFromGeneratedFile(int stacklevel) {
       return false;
     }
   }
-  if (frame->f_globals != frame->f_locals) {
-    // Not at global module scope
-    return false;
-  }
 
   if (frame->f_code->co_filename == NULL) {
     return false;
@@ -123,6 +119,10 @@ bool _CalledFromGeneratedFile(int stacklevel) {
     PyErr_Clear();
     return false;
   }
+  if ((filename_size < 3) || (strcmp(&filename[filename_size - 3], ".py") != 0)) {
+    // Cython's stack does not have .py file name and is not at global module scope.
+    return true;
+  }
   if (filename_size < 7) {
     // filename is too short.
     return false;
@@ -131,6 +131,11 @@ bool _CalledFromGeneratedFile(int stacklevel) {
     // Filename is not ending with _pb2.
     return false;
   }
+  
+  if (frame->f_globals != frame->f_locals) {
+    // Not at global module scope
+    return false;
+  }
 #endif
   return true;
 }