Test and fix bug #1191981.
diff --git a/decode_test.go b/decode_test.go
index 89a9fdb..bac544b 100644
--- a/decode_test.go
+++ b/decode_test.go
@@ -300,7 +300,7 @@
 		&struct{ B []int }{[]int{1, 2}},
 	},
 
-	// BUG #1133337
+	// Bug #1133337
 	{
 		"foo: ''",
 		map[string]*string{"foo": new(string)},
@@ -317,22 +317,46 @@
 			B int "-"
 		}{1, 0},
 	},
+
+	// Bug #1191981
+	{
+		"" +
+			"%YAML 1.1\n" +
+			"--- !!str\n" +
+			`"Generic line break (no glyph)\n\` + "\n" +
+			` Generic line break (glyphed)\n\` + "\n" +
+			` Line separator\u2028\` + "\n" +
+			` Paragraph separator\u2029"` + "\n",
+		"" +
+			"Generic line break (no glyph)\n" +
+			"Generic line break (glyphed)\n" +
+			"Line separator\u2028Paragraph separator\u2029",
+	},
 }
 
 func (s *S) TestUnmarshal(c *C) {
 	for i, item := range unmarshalTests {
 		t := reflect.ValueOf(item.value).Type()
 		var value interface{}
-		if t.Kind() == reflect.Map {
+		switch t.Kind() {
+		case reflect.Map:
 			value = reflect.MakeMap(t).Interface()
-		} else {
+		case reflect.String:
+			t := reflect.ValueOf(item.value).Type()
+			v := reflect.New(t)
+			value = v.Interface()
+		default:
 			pt := reflect.ValueOf(item.value).Type()
 			pv := reflect.New(pt.Elem())
 			value = pv.Interface()
 		}
 		err := goyaml.Unmarshal([]byte(item.data), value)
 		c.Assert(err, IsNil, Commentf("Item #%d", i))
-		c.Assert(value, DeepEquals, item.value)
+		if t.Kind() == reflect.String {
+			c.Assert(*value.(*string), Equals, item.value, Commentf("Item #%d", i))
+		} else {
+			c.Assert(value, DeepEquals, item.value, Commentf("Item #%d", i))
+		}
 	}
 }
 
diff --git a/scannerc.go b/scannerc.go
index daad349..943a597 100644
--- a/scannerc.go
+++ b/scannerc.go
@@ -2520,7 +2520,7 @@
 		// Join the whitespaces or fold line breaks.
 		if leading_blanks {
 			// Do we need to fold line breaks?
-			if leading_break[0] == '\n' {
+			if len(leading_break) > 0 && leading_break[0] == '\n' {
 				if len(trailing_breaks) == 0 {
 					s = append(s, ' ')
 				} else {