s390/con3270: fix insufficient space padding
[pandora-kernel.git] / drivers / s390 / char / con3270.c
index 8de9f29..d9c6ae9 100644 (file)
@@ -121,7 +121,12 @@ con3270_create_status(struct con3270 *cp)
 static void
 con3270_update_string(struct con3270 *cp, struct string *s, int nr)
 {
 static void
 con3270_update_string(struct con3270 *cp, struct string *s, int nr)
 {
-       if (s->len >= cp->view.cols - 5)
+       if (s->len < 4) {
+               /* This indicates a bug, but printing a warning would
+                * cause a deadlock. */
+               return;
+       }
+       if (s->string[s->len - 4] != TO_RA)
                return;
        raw3270_buffer_address(cp->view.dev, s->string + s->len - 3,
                               cp->view.cols * (nr + 1));
                return;
        raw3270_buffer_address(cp->view.dev, s->string + s->len - 3,
                               cp->view.cols * (nr + 1));
@@ -452,7 +457,7 @@ con3270_cline_end(struct con3270 *cp)
                cp->cline->len + 4 : cp->view.cols;
        s = con3270_alloc_string(cp, size);
        memcpy(s->string, cp->cline->string, cp->cline->len);
                cp->cline->len + 4 : cp->view.cols;
        s = con3270_alloc_string(cp, size);
        memcpy(s->string, cp->cline->string, cp->cline->len);
-       if (s->len < cp->view.cols - 5) {
+       if (cp->cline->len < cp->view.cols - 5) {
                s->string[s->len - 4] = TO_RA;
                s->string[s->len - 1] = 0;
        } else {
                s->string[s->len - 4] = TO_RA;
                s->string[s->len - 1] = 0;
        } else {