```python
from typing import *
from collections import *

def glob_path(pattern: str, path: str) -> bool:
    if not isinstance(pattern, str) or not isinstance(path, str):
        raise ValueError("Both pattern and path must be strings")
    if not pattern or not path:
        return False

    def match_char(c1, c2):
        return c1 == c2 or (c1 == '?' and c2 != '/') or (c1 == '*' and c2 == '/')

    i = 0
    j = 0
    while i < len(pattern) and j < len(path):
        if pattern[i] == '*':
            # Match zero or more characters in the path
            while j < len(path) and not match_char(pattern[i], path[j]):
                j += 1
            if j >= len(path):
                return True
            i += 1
        elif pattern[i] == '?':
            # Match exactly one character in the path
            if j >= len(path) or not match_char(pattern[i], path[j]):
                return False
            i += 1
            j += 1
        else:
            # Match a literal character in the path
            if j >= len(path) or pattern[i] != path[j]:
                return False
            i += 1
            j += 1

    return i == len(pattern)
```