diff options
| author | Kim F. Storm | 2005-04-19 08:34:50 +0000 |
|---|---|---|
| committer | Kim F. Storm | 2005-04-19 08:34:50 +0000 |
| commit | f374520488d14e4403a9df52bc751de5e4ab8005 (patch) | |
| tree | d584ee18b15450ec128f2cd3d9629b77a1740e49 | |
| parent | 7dfe2054bcfec54203ce07dfa570a6e307608d32 (diff) | |
| download | emacs-f374520488d14e4403a9df52bc751de5e4ab8005.tar.gz emacs-f374520488d14e4403a9df52bc751de5e4ab8005.zip | |
(resolve_face_name): Use Fsafe_get to avoid redisplay
loops in case of bad face property lists. Limit number of face
alias lookups to 10 (in case of face alias loops).
| -rw-r--r-- | src/xfaces.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/xfaces.c b/src/xfaces.c index 3ff8917ff91..d8ae7c2af19 100644 --- a/src/xfaces.c +++ b/src/xfaces.c | |||
| @@ -3211,17 +3211,19 @@ resolve_face_name (face_name) | |||
| 3211 | Lisp_Object face_name; | 3211 | Lisp_Object face_name; |
| 3212 | { | 3212 | { |
| 3213 | Lisp_Object aliased; | 3213 | Lisp_Object aliased; |
| 3214 | int alias_loop_max = 10; | ||
| 3214 | 3215 | ||
| 3215 | if (STRINGP (face_name)) | 3216 | if (STRINGP (face_name)) |
| 3216 | face_name = intern (SDATA (face_name)); | 3217 | face_name = intern (SDATA (face_name)); |
| 3217 | 3218 | ||
| 3218 | while (SYMBOLP (face_name)) | 3219 | while (SYMBOLP (face_name)) |
| 3219 | { | 3220 | { |
| 3220 | aliased = Fget (face_name, Qface_alias); | 3221 | aliased = Fsafe_get (face_name, Qface_alias); |
| 3221 | if (NILP (aliased)) | 3222 | if (NILP (aliased)) |
| 3222 | break; | 3223 | break; |
| 3223 | else | 3224 | if (--alias_loop_max == 0) |
| 3224 | face_name = aliased; | 3225 | break; |
| 3226 | face_name = aliased; | ||
| 3225 | } | 3227 | } |
| 3226 | 3228 | ||
| 3227 | return face_name; | 3229 | return face_name; |