--- python/google/protobuf/internal/test_util.py
+++ python/google/protobuf/internal/test_util.py
@@ -39,6 +39,7 @@ __author__ = 'robinson@google.com (Will Robinson)'
 import numbers
 import operator
 import os.path
+import pathlib
 
 from google.protobuf import unittest_import_pb2
 from google.protobuf import unittest_pb2
@@ -617,17 +618,22 @@ def ExpectAllFieldsSet(test_case, message):
                           message.default_import_enum)
 
 
+def _SearchUp(path, filename):
+  path = pathlib.Path(path).resolve()
+  for parent in [path] + list(path.parents):
+    file_path = parent / ('google/protobuf/testdata/' + filename)
+    if file_path.exists():
+      # Found it.  Load the golden file from the testdata directory.
+      return file_path.open('rb')
+  return None
+
 def GoldenFile(filename):
   """Finds the given golden file and returns a file object representing it."""
 
   # Search up the directory tree looking for the C++ protobuf source code.
-  path = '.'
-  while os.path.exists(path):
-    if os.path.exists(os.path.join(path, 'src/google/protobuf')):
-      # Found it.  Load the golden file from the testdata directory.
-      full_path = os.path.join(path, 'src/google/protobuf/testdata', filename)
-      return open(full_path, 'rb')
-    path = os.path.join(path, '..')
+  f = _SearchUp('.', filename) or _SearchUp(__file__, filename)
+  if f:
+      return f
 
   # Search internally.
   path = '.'

--- python/internal.bzl
+++ python/internal.bzl
@@ -1,5 +1,11 @@
 # Internal helpers for building the Python protobuf runtime.
 
+def _remove_cross_repo_path(path):
+    components = path.split("/")
+    if components[0] == "..":
+        return "/".join(components[2:])
+    return path
+
 def _internal_copy_files_impl(ctx):
     strip_prefix = ctx.attr.strip_prefix
     if strip_prefix[-1] != "/":
@@ -7,10 +13,11 @@ def _internal_copy_files_impl(ctx):
 
     src_dests = []
     for src in ctx.files.srcs:
-        if src.short_path[:len(strip_prefix)] != strip_prefix:
+        short_path = _remove_cross_repo_path(src.short_path)
+        if short_path[:len(strip_prefix)] != strip_prefix:
             fail("Source does not start with %s: %s" %
-                 (strip_prefix, src.short_path))
-        dest = ctx.actions.declare_file(src.short_path[len(strip_prefix):])
+                 (strip_prefix, short_path))
+        dest = ctx.actions.declare_file(short_path[len(strip_prefix):])
         src_dests.append([src, dest])
 
     if ctx.attr.is_windows:
