summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKurt Jung <kurt.w.jung@code.google.com>2013-09-04 15:06:56 -0400
committerKurt Jung <kurt.w.jung@code.google.com>2013-09-04 15:06:56 -0400
commit845888136482c81fd76860b57e254c0e8fa6c149 (patch)
tree0cb49ce1cf0de4875ee103495490b63b8bccd22c
parent9b78fbbf6a97869fca10d53e11a52b2d2a9c37a2 (diff)
Set error condition if out-of-range Unicode rune is encountered in GetStringWidth
-rw-r--r--fpdf.go13
-rw-r--r--ttfparser_test.go20
2 files changed, 30 insertions, 3 deletions
diff --git a/fpdf.go b/fpdf.go
index 7b286a2..a7fb350 100644
--- a/fpdf.go
+++ b/fpdf.go
@@ -658,9 +658,20 @@ func (f *Fpdf) SetTextColor(r, g, b int) {
// Returns the length of a string in user units. A font must be selected.
func (f *Fpdf) GetStringWidth(s string) float64 {
+ if f.err != nil {
+ return 0
+ }
w := 0
+ count := rune(len(f.currentFont.Cw))
for _, ch := range s {
- w += f.currentFont.Cw[ch]
+ if ch < count {
+ w += f.currentFont.Cw[ch]
+ } else {
+ if f.err == nil {
+ f.err = fmt.Errorf("Unicode strings not supported")
+ }
+ return 0
+ }
}
return float64(w) * f.fontSize / 1000
}
diff --git a/ttfparser_test.go b/ttfparser_test.go
index 00f4030..9bb3d71 100644
--- a/ttfparser_test.go
+++ b/ttfparser_test.go
@@ -19,8 +19,7 @@ package gofpdf_test
import (
"code.google.com/p/gofpdf"
"fmt"
-
-// "testing"
+ // "testing"
)
func ExampleTtfParse() {
@@ -67,3 +66,20 @@ func ExampleTtfParse() {
// }
// }
// }
+
+func ExampleFpdf_GetStringWidth() {
+ pdf := gofpdf.New("", "", "", FONT_DIR)
+ pdf.SetFont("Helvetica", "", 12)
+ pdf.AddPage()
+ for _, s := range []string{"Hello", "世界"} {
+ fmt.Printf("Width of \"%s\" is %.2f\n", s, pdf.GetStringWidth(s))
+ if pdf.Err() {
+ fmt.Println(pdf.Error())
+ }
+ }
+ pdf.Close()
+ // Output:
+ // Width of "Hello" is 9.64
+ // Width of "世界" is 0.00
+ // Unicode strings not supported
+}